设计模式之Composite

Composite定义:
       顾名思义,该模式将对象以树形结构组织起来,以达成“部分-总体” 的层次结构,使得客户端对单个对象和组合对象的使用具备一致性.
服务器

 

Composite好处:
1.使客户端调用简单,客户端能够一致的使用组合结构或其中单个对象,用户就没必要关系本身处理的是单个对象仍是整个组合结构,这就简化了客户端代码。
2.更容易在组合体内加入对象部件. 客户端没必要由于加入了新的对象部件而更改代码。
ui

 

eg:spa

 

      服务器端菜用继承方式取得父子类关系以便后面使用。.net

      客户端代码 对象

 

Cabinet cabinet=new Cabinet("Tower");

Chassis chassis=new Chassis("PC Chassis");
//将PC Chassis装到Tower中 (将盘盒装到箱子里)
cabinet.add(chassis);
//将一个10GB的硬盘装到 PC Chassis (将硬盘装到盘盒里)
chassis.add(new Disk("10 GB"));

//调用 netPrice()方法;
System.out.println("netPrice="+cabinet.netPrice());
System.out.println("discountPrice="+cabinet.discountPrice());
继承

 

上面调用的方法netPrice()或discountPrice(),实际上Composite使用Iterator遍历了整个树形结构,寻找一样包含这个方法的对象并实现调用执行.ip

 

Composite模式,在实际应用中,若是碰到树形结构,就能够尝试是否能够使用这个模式。it

 

在网上拷贝一个Jive的例子:thread

 

Jive解剖
在Jive中 ForumThread是ForumMessages的容器container(组合体).也就是说,ForumThread相似咱们上例中的 CompositeEquipment.它和messages的关系如图:
[thread]
   |- [message]
   |- [message]
      |- [message]
      |- [message]
         |- [message]
容器

咱们在ForumThread看到以下代码:

 

相似CompositeEquipment, 提供用于访问本身组合体内的部件方法: 增长 删除 遍历.

相关文章
相关标签/搜索