设计模式之 Composite(组合)通俗理解
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(组合)通俗理解相关推荐
- Java 设计模式之 Composite 组合模式
Composite 组合模式相对简单,一般用于处理树状结构,递归结构,类似计算机中的文件系统,有文件夹,文件,文件夹里可以有文件:再比如一棵树,有枝干,叶子节点组成,枝干上又有叶子. 这里以构造一棵 ...
- 设计模式之 Interpreter(解释器) 通俗理解
23种设计模式 1 Interpreter定义: 定义语言的文法 ,并且建立一个解释器来解释该语言中的句子.通俗来讲就是定义一套规则,然后有个工具类,根据你传入的参数就知道你表达的意思. Interp ...
- JAVA设计模式十七--Composite(组合模式)
组合模式 组合模式(Composite Pattern)有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念 ,客户程序可以向处理简单元素一样来处理复杂元素,从而使 ...
- 设计模式学习-Composite(组合模式)
意图:将对象组合成树型结构以表示"部分-整体"的层次结构.Composite使得用户对于单个对象和组合对象的使用具有一致性 Compoite模式的关键是一个抽象类,即表示具体类也表 ...
- 23种设计模式通俗理解
23种设计模式通俗理解 1.根据目的来分 2.根据作用范围来分 3.GoF的23种设计模式的功能 1.FACTORY 工厂方法 2.BUILDER建造者模式 3.FACTORY METHOD抽象工厂 ...
- 设计模式08: Composite 组合模式(结构型模式)
Composite 组合模式(结构型模式) 对象容器的问题 在面向对象系统中,我们常会遇到一类具有"容器"特征的对象--即他们在充当对象的同时,又是其他对象的容器. public ...
- 设计模式学习笔记——组合(Composite)模式
设计模式学习笔记--组合(Composite)模式 @(设计模式)[设计模式, 组合模式, composite] 设计模式学习笔记组合Composite模式 基本介绍 组合案例 类图 实现代码 Ent ...
- 设计模式学习笔记(九)——Composite组合模式
Composite组合模式主要是应对这样的问题:一类具有"容器特征"的对象--即他们在充当对象的同时,又是其他对象的容器的情况.在编写时我们常常会造成:客户代码过多地依赖于对象容器 ...
- C++设计模式-Composite组合模式
Composite组合模式 作用:将对象组合成树形结构以表示"部分-整体"的层次结构.Composite使得用户对单个对象和组合对象的使用具有一致性. UML图如下: 在Compo ...
最新文章
- javascript高级程序设计笔记
- 未来脑机接口的电极”衣服”可能长这样,你会喜欢吗?
- java Graphics2D类
- python 常用PEP8规范
- Oracle exp/imp导出导入工具的使用
- ack是什么,如何使用Ack机制,如何关闭Ack机制,基本实现,STORM的消息容错机制,Ack机制
- LInux查看文件内容
- 路由相关知识,静态路由、默认路由、浮动路由的概念以及基本设置
- adb: createprocessw failed: 系统找不到指定的路径_gcc编译过程、gcc命令参数、静态库和动态库搜索路径...
- 触发器及其应用实验报告总结_调机技巧总结: 先快后慢射胶法及其应用
- Android开发笔记(一百六十九)利用BottomNavigationView实现底部标签栏
- PHP回顾之多进程编程
- 应用程序无法正常启动0xc0150002 解决方案
- 百度地图和Echarts的简单使用
- 零管理费的基金你见过吗?基金行业价格战预演
- 蓝桥 盾神与积木游戏(Java)
- 微信诱导分享怎么防封_微信域名防红防封系统,轻松微信推广域名被屏蔽问题
- 蓝牙协议之配对和绑定学习笔记
- 《那些年啊,那些事——一个程序员的奋斗史》——123
- 你轻轻哼唱一句,都是最美的一首歌
热门文章
- C语言 利用函数计算素数个数并求和
- js正则表达式及语法
- PowerDesigner Excel导入信息
- 吴恩达机器学习MATLAB代码笔记(1)梯度下降
- ARM中断向量表与响应流程
- TMS320F28335中断向量表
- html 图片滑动验证码,selenium滑动验证码
- windows 提示缺少VCRUNTIME140.dll错误
- 报数游戏1-3循环报数,报到3的人退出,求原来的序号
- java解析XML saxReader.read(xml) 错误:org.dom4j.DocumentException: no protocol