组合模式
来源:互联网 发布:中国的反导弹系统知乎 编辑:程序博客网 时间:2024/05/18 01:41
组合模式:将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
即整体与部分可以被一致对待,我们就声明一个接口,其中包括所有管理子对象的方法。枝节点维护一个List的Add和Remove方法,叶节点的Add和Remove没有意义。
看Component接口:
public abstract class Component { protected String name; public Component(String name) { this.name = name; } public abstract void add(Component c); public abstract void remove(Component c); public abstract void display(int depth);}
来看枝节点
public class Composite extends Component { private List<Component> children = new ArrayList<Component>(); public Composite(String name) { super(name); } @Override public void add(Component c) { children.add(c); } @Override public void remove(Component c) { children.remove(c); } @Override public void display(int depth) { for (int j = 0 ; j < depth; j++) { System.out.print("-"); } System.out.println(name); for (Component c : children) { c.display(depth + 2); } }}
枝节点维护List的增删,并且遍历调用所有子对象的接口方法。
public class Leaf extends Component { public Leaf(String name) { super(name); } @Override public void display(int depth) { for(int i = 0; i < depth; i++) { System.out.print("-"); } System.out.println(name); } @Override public void remove(Component c) { } @Override public void add(Component c) { }}
叶节点的Add和Remove方法没有实际意义。
主函数代码:
Composite root = new Composite("root");root.add(new Leaf("Leaf A"));root.add(new Leaf("Leaf B"));Composite comp = new Composite("Composite x");comp.add(new Leaf("Leaf xA"));comp.add(new Leaf("Leaf xB"));root.add(comp);Composite comp2 = new Composite("Composite xy");comp2.add(new Leaf("Leaf XYA"));comp2.add(new Leaf("Leaf XYB"));comp.add(comp2);root.add(new Leaf("Leaf C"));Leaf leaf = new Leaf("Leaf D");root.add(leaf);root.remove(leaf);root.display(1);
结果:
-root---Leaf A---Leaf B---Composite x-----Leaf xA-----Leaf xB-----Composite xy-------Leaf XYA-------Leaf XYB---Leaf C
比如说一些科技公司,它们的深圳总部有所有产品线和管理、运营部门,但是各省市分公司的部门相对不那么完整,但是基本职能都一样,这时就对应上组合模式了。每个分公司为枝叶,每个部门为子叶,各省市就如总公司的枝叶节点一样,总公司也有自己的子叶节点。
0 0
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 组合模式
- 2017.02.17回顾 normalized entropy Calibration
- 磁力计的基本工作原理
- org.apache.axiom.om.OMException: com.ctc.wstx.exc.WstxIOException: Invalid UTF-8
- 转:理清编译链接的那些事儿
- C# 中的委托和事件(详解)
- 组合模式
- (52)Java学习笔记——网络编程 / UDP协议
- HttpURLConnection 直接发送soap消息调用webservice
- C/C++静态变量static详解
- 页面抖动(颠簸)和工作集(驻留集)
- 《IllegalStateException异常:DialogActivity设置报错》
- android系统签名
- 实现基于mongo的REST
- 解析unordeded_map和unordeded_set的底层实现