<设计模式12>组合模式
来源:互联网 发布:龙王传说实体书淘宝 编辑:程序博客网 时间:2024/04/29 20:40
组合模式其实是一个很形象的模式。它也被称为部分整体模式。
组合模式的结构就如同树状图一样。而树就是枝干、叶子的组合,组合模式可以形象的这么理解。
其实文件夹是一个很好的组合模式的体现。
一个文件夹(树根root)下可能有多个文件夹(枝干Trunk),可能是单个的文件(树叶leaf)。
而枝干是可以继续向下延伸的,树叶则是树枝的端点,不能继续延伸。文件夹和文件也是如此。
同样如此,公司的结构也可以用组合模式展示。
一个总公司下可能两个子公司(Trunk),而子公司下可能有某个部门(leaf)。这种就是以树的形式展开的。
下面我就用公司的例子展示一下,组合模式的基本代码。
首先创建一个抽象类,代表一个抽象的根节点,而枝干、叶子都是由这个根节点抽象而来。
public abstract class AbstractRoot {private String name;public AbstractRoot(String name){this.name = name;}public abstract void show();}
实现枝干的逻辑。枝干是可以继续扩展的,因此应该有一个存储下一枝干、叶子的集合,同时有添加、删除叶子的方法:
/** * 枝干,可能有分支,所以要用一个list来添加和删除分支,分支可能是另一个分支或者是叶子 * @author xiaoqi * */public class Trunk extends AbstractRoot{private List<AbstractRoot> list = new ArrayList<>();String name;public Trunk(String name) {super(name);this.name = name;}@Overridepublic void show() {System.out.println("枝干:"+name);for(AbstractRoot root:list){root.show();}}/** * 添加子节点 */public void add(AbstractRoot child){list.add(child);}/** * 删除子节点 * @param chid */public void remove(AbstractRoot child){list.remove(child);}}而子公司就是可以扩展下一部门的,因此子公司就是一个枝干。
叶子Leaf:叶子是没有继续下一节点的,因此它只能用来显示:
/** * 叶子是没有分支的,所以只能用来显示,并不能继续扩展了 * @author xiaoqi * */public class Leaf extends AbstractRoot{String name;public Leaf(String name) {super(name);this.name = name;}@Overridepublic void show() {System.out.println(name);}}
而公司的各个部门就是叶子,它下面就没有下一级单位了。
使用测试:
public class CompositeTest {public static void main(String[] args) {Trunk root = new Trunk("总公司");Trunk childCom1 = new Trunk("子公司1");Trunk childCom2 = new Trunk("子公司2");Leaf leaf1 = new Leaf("客服部");Leaf leaf2 = new Leaf("市场部");//总公司有两个分公司root.add(childCom1);root.add(childCom2);//分公司1有一个客服部childCom1.add(leaf1);//分公司2有一个市场部childCom1.add(leaf2);root.show();}}
首先创建一个“总公司”,为总公司添加两个子公司,
而两个子公司各自有两个不同的部门,因此可以继续各自添加。
部门是没有下一级单位的,因此不能操作了。
测试结果:
枝干:总公司枝干:子公司1客服部市场部枝干:子公司2
结果也和我们想的一样,是一个以“总公司”为根节点扩展的一个树形结构。
组合模式的基本使用就介绍到这了,关于更深的研究还是得在项目中才能理解。
1 0
- <设计模式12>组合模式
- 设计模式:组合模式
- 设计模式-----组合模式
- 设计模式 组合模式
- 设计模式--组合模式
- 设计模式---组合模式
- 【设计模式】组合模式
- 设计模式 - 组合模式
- 设计模式----组合模式
- 设计模式 - 组合模式
- 设计模式:组合模式
- 设计模式 - 组合模式
- 设计模式-组合模式
- 设计模式 - 组合模式
- 【设计模式】组合模式
- 设计模式--组合模式
- 设计模式-组合模式
- 设计模式:组合模式
- 树状数组( 单点修改/区间修改+区间求和+一维/二维)
- 191. Number of 1 Bits *
- Memcached 之 .NET(C#)实例分析
- 在Ubuntu14.04中安装Docker
- Hadoop伪分布式环境搭建
- <设计模式12>组合模式
- Java 两个变量的值互相交换
- 设置Android软键盘的默认不弹出
- git与svn的区别,你分清楚了吗
- 12 获取外部存储卡大小
- 数组去重的四种方法,简单好理解
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式)
- 在CCSv6中添加simulator
- java内存泄漏分类及避免