23种设计模式

1 Composite 模式定义

将对象以树形结构组织起来,以达成“部分-整体” 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性。
Composite 比较容易理解,想到 Composite 就应该想到树形结构图。组合体内这些对象都有共同接口,当组合体一个对象的方法被调用执行时,Composite 将遍历(Iterator)整个树形结构,寻找同样包含这个方法的对象并实现调用执行。可以用牵一动百来形容。
所以 Composite 模式使用到 Iterator 模式,和 Chain of Responsibility (职责链)模式类似。


2 Composite 好处

1.使客户端调用简单,客户端可以一致的使用组合结构或其中单个对象,用户就不必关系自己处理的是单个对象还是整个组合结构,这就简化了客户端代码。
2.更容易在组合体内加入对象部件. 客户端不必因为加入了新的对象部件而更改代码。

3 如何使用 Composite?

首先定义一个接口或抽象类,这是设计模式通用方式了,其他设计模式对接口内部定义限制不多,Composite 却有个规定,那就是要在接口内部定义一个用于访问和管理 Composite组合体的对象们(或称部件 Component)。

下面举例简单代码实现:

package xx.study.design.composite.case2;import javax.smartcardio.Card;public class CompositeDemo {public static void main(String[] args) {SaddleChild frontSaddle=new SaddleChild("我是特斯拉前座");SaddleChild backSaddle=new SaddleChild("我是特斯拉后座");Saddle saddle=new Saddle("我是特斯拉车座");//放到车座对象集合里saddle.saddleList.add(frontSaddle);saddle.saddleList.add(backSaddle);CarDoorChild leftDoor=new CarDoorChild("我是特斯拉左车门");CarDoorChild rightDoor=new CarDoorChild("我是特斯拉右车门");CarDoor carDoor=new CarDoor("我是特斯拉车门");//放到车门集合里carDoor.carDoorList.add(leftDoor);carDoor.carDoorList.add(rightDoor);//放到根节点里Car car=new Car("我是特斯拉");car.list.add(saddle);car.list.add(carDoor);//调用此方法 可以调用所有子节点;管理全部节点car.callName();}
}
package xx.study.design.composite.case2;public interface ICar {public void callName() ;
}package xx.study.design.composite.case2;import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class Car  implements ICar{
//    private CarDoor carDoor;
//    private Saddle saddle;public List list=new ArrayList();private String name;public void callName() {System.out.println("我是特斯拉");Iterator iterator=list.iterator();while (iterator.hasNext()){((ICar)iterator.next()).callName();}}public Car(String name){this.name=name;}}
package xx.study.design.composite.case2;import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;/*** 车座*/
public class Saddle implements ICar {//用来装孩子public List saddleList=new ArrayList();public  String name;public Saddle(String name){this.name=name;}public void callName() {System.out.println(name);Iterator iterator=saddleList.iterator();while (iterator.hasNext()){((ICar)iterator.next()).callName();}}
}package xx.study.design.composite.case2;public class SaddleChild extends Saddle implements ICar {public SaddleChild(String name) {super(name);}public void callName() {System.out.println(name);}
}
package xx.study.design.composite.case2;import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;public class CarDoor  implements ICar{public List carDoorList=new ArrayList();public  String name;public CarDoor(String name){this.name=name;}public void callName() {System.out.println(name);Iterator iterator=carDoorList.iterator();while (iterator.hasNext()){((ICar)iterator.next()).callName();}}
}package xx.study.design.composite.case2;public class CarDoorChild extends CarDoor implements ICar{public CarDoorChild(String name) {super(name);}public void callName() {System.out.println(name);}
}

设计模式之 Composite(组合)通俗理解相关推荐

  1. Java 设计模式之 Composite 组合模式

    Composite  组合模式相对简单,一般用于处理树状结构,递归结构,类似计算机中的文件系统,有文件夹,文件,文件夹里可以有文件:再比如一棵树,有枝干,叶子节点组成,枝干上又有叶子. 这里以构造一棵 ...

  2. 设计模式之 Interpreter(解释器) 通俗理解

    23种设计模式 1 Interpreter定义: 定义语言的文法 ,并且建立一个解释器来解释该语言中的句子.通俗来讲就是定义一套规则,然后有个工具类,根据你传入的参数就知道你表达的意思. Interp ...

  3. JAVA设计模式十七--Composite(组合模式)

    组合模式 组合模式(Composite Pattern)有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念   ,客户程序可以向处理简单元素一样来处理复杂元素,从而使 ...

  4. 设计模式学习-Composite(组合模式)

    意图:将对象组合成树型结构以表示"部分-整体"的层次结构.Composite使得用户对于单个对象和组合对象的使用具有一致性 Compoite模式的关键是一个抽象类,即表示具体类也表 ...

  5. 23种设计模式通俗理解

    23种设计模式通俗理解 1.根据目的来分 2.根据作用范围来分 3.GoF的23种设计模式的功能 1.FACTORY 工厂方法 2.BUILDER建造者模式 3.FACTORY METHOD抽象工厂 ...

  6. 设计模式08: Composite 组合模式(结构型模式)

    Composite 组合模式(结构型模式) 对象容器的问题 在面向对象系统中,我们常会遇到一类具有"容器"特征的对象--即他们在充当对象的同时,又是其他对象的容器. public ...

  7. 设计模式学习笔记——组合(Composite)模式

    设计模式学习笔记--组合(Composite)模式 @(设计模式)[设计模式, 组合模式, composite] 设计模式学习笔记组合Composite模式 基本介绍 组合案例 类图 实现代码 Ent ...

  8. 设计模式学习笔记(九)——Composite组合模式

    Composite组合模式主要是应对这样的问题:一类具有"容器特征"的对象--即他们在充当对象的同时,又是其他对象的容器的情况.在编写时我们常常会造成:客户代码过多地依赖于对象容器 ...

  9. C++设计模式-Composite组合模式

    Composite组合模式 作用:将对象组合成树形结构以表示"部分-整体"的层次结构.Composite使得用户对单个对象和组合对象的使用具有一致性. UML图如下: 在Compo ...

最新文章

  1. javascript高级程序设计笔记
  2. 未来脑机接口的电极”衣服”可能长这样,你会喜欢吗?
  3. java Graphics2D类
  4. python 常用PEP8规范
  5. Oracle exp/imp导出导入工具的使用
  6. ack是什么,如何使用Ack机制,如何关闭Ack机制,基本实现,STORM的消息容错机制,Ack机制
  7. LInux查看文件内容
  8. 路由相关知识,静态路由、默认路由、浮动路由的概念以及基本设置
  9. adb: createprocessw failed: 系统找不到指定的路径_gcc编译过程、gcc命令参数、静态库和动态库搜索路径...
  10. 触发器及其应用实验报告总结_调机技巧总结: 先快后慢射胶法及其应用
  11. Android开发笔记(一百六十九)利用BottomNavigationView实现底部标签栏
  12. PHP回顾之多进程编程
  13. 应用程序无法正常启动0xc0150002 解决方案
  14. 百度地图和Echarts的简单使用
  15. 零管理费的基金你见过吗?基金行业价格战预演
  16. 蓝桥 盾神与积木游戏(Java)
  17. 微信诱导分享怎么防封_微信域名防红防封系统,轻松微信推广域名被屏蔽问题
  18. 蓝牙协议之配对和绑定学习笔记
  19. 《那些年啊,那些事——一个程序员的奋斗史》——123
  20. 你轻轻哼唱一句,都是最美的一首歌

热门文章

  1. C语言 利用函数计算素数个数并求和
  2. js正则表达式及语法
  3. PowerDesigner Excel导入信息
  4. 吴恩达机器学习MATLAB代码笔记(1)梯度下降
  5. ARM中断向量表与响应流程
  6. TMS320F28335中断向量表
  7. html 图片滑动验证码,selenium滑动验证码
  8. windows 提示缺少VCRUNTIME140.dll错误
  9. 报数游戏1-3循环报数,报到3的人退出,求原来的序号
  10. java解析XML saxReader.read(xml) 错误:org.dom4j.DocumentException: no protocol