Composite 组合模式
来源:互联网 发布:我的青春恋爱物语知乎 编辑:程序博客网 时间:2024/05/11 06:19
模式定义
在实际的编程中常常出现这样的情形:A对象包含了另外一个对象B,而B又包含了其他对象C和D,好比一棵树,树枝上有树枝,树枝上再有小树枝或树叶,这样的层次结构可以用Composite模式来实现。因此Composite模式将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。
使用范围
- 多个对象之间存在层次组合的结构
- 使组合对象或者单个对象对于客户而言具有访问的一致性
使用方法
将组合对象与单个对象的共有属性或方法剥离出一个抽象类,组合对象与单个对象分别继承该抽象类并实例化。
举例说明
我们用Composite来描述一棵树。树是树枝和树叶的抽象,树有名字(可能为树枝,也可能为树叶,体现为具体的子类),用add方法表示树枝可以有其他树枝或树叶,用printAll表述列举一棵树的完整结构。
import java.util.ArrayList;public abstract class Tree {protected ArrayList list = new ArrayList();protected String name = null;public Tree(){};public abstract void add(Tree t);public abstract void remove(Tree t);public abstract void printAll();}
树枝节点:
public class Branch extends Tree {public Branch(String name){this.name = name;}public void add(Tree t) {list.add(t);}public void printAll() {for (int i=0; i< list.size(); i++){System.out.println(name);System.out.println("|---");((Tree)list.get(i)).printAll();}}public void remove(Tree t) {if (list.contains(t))list.remove(t);}}
树叶节点,注意树叶属于最低级的一个树,不再包含其他树的实例对象,因此不存在add方法。
public class Leaf extends Tree {public Leaf(String name){this.name = name;}public void add(Tree t) {return;}public void printAll() {System.out.println(name);}public void remove(Tree t) {return;}}
最后,给出一棵树的完整结构,比如:
通过Tree.add方法在树枝上加树枝或加叶,即能实现一棵完整的树。
public class Client {public static void main(String args[]){Tree root= new Branch("Root");Tree branch1 = new Branch("B1");Tree branch2 = new Branch("B2");Tree branch3 = new Branch("B3");Tree branch4 = new Branch("B4");Tree leaf1 = new Leaf("L1");Tree leaf2 = new Leaf("L2");Tree leaf3 = new Leaf("L3");root.add(branch1);root.add(branch3);branch1.add(branch2);branch1.add(leaf1);branch2.add(branch4);branch2.add(leaf2);branch3.add(leaf3);root.printAll();}}
类结构示意
该样例的类结构如下:
下载示例
- Java代码 zigzagsoft_designpattern_composite.zip
- Composite模式 组合模式
- 组合模式:Composite模式
- 组合模式(Composite)
- Composite组合模式
- 组合模式-Composite Pattern
- Composite 组合模式
- Composite Pattern(组合模式)
- 组合模式(Composite)
- Composite组合模式
- 组合模式(Composite)
- 组合模式Composite
- Composite 组合模式
- Composite(组合模式)
- java Composite 组合模式
- Composite 组合模式
- 组合模式(Composite Patten)
- Composite(组合模式)
- 11.组合模式--Composite
- jQuery 1.3 正式版发布公告
- ftp笔记
- 求逆序对个数(合并排序)
- 随笔-关于元数据
- 新春快乐
- Composite 组合模式
- 怎样才能充分利用SQL索引
- c#委托和事件
- 批量替換
- sql数据库修复技术
- C#的New关键字有几种用法
- live不是万能的
- Python例程:使用adodbapi访问MSSQL数据库
- Python例程:使用adodbapi存取二进制数据