java 23种常用设计模式之组合模式(Composite)
2015-01-05 16:34
866 查看
组合模式,有时又叫部分-整体模式。
在处理类似树形结构的问题时比较方便,就比如家里的家庭成员,老黑家的家谱如下:
老黑有两个儿子,一个叫大黑,一个叫二黑,看代码:
组合模式有两种模式,透明模式和安全模式。上面说的这种是安全模式,透明模式是把用来组合使用的方法放到抽象类中,比如add(),remove()以及getChildren 等方法(顺便说一下,getChildren 一般返回的结果为Iterable的实现类,很多,大家可以看JDK 的帮助),不管叶子对象还是树枝对象都有相同的结构,通过判断是getChildren 的返回值确认是叶子节点还是树枝节点,如果处理不当,这个会在运行期出现问题的,不是很建议的方式;安全模式就不同了,它是把树枝节点和树叶节点彻底分开,树枝节点单独拥有用来组合的方法,这种方法比较安全,我们的例子使用了安全模式。
组合模式的优点有哪些呢?第一个优点只要是树形结构,就要考虑使用组合模式,这个一定记住,只要是要体现局部和整体的关系的时候,而且这种关系还可能比较深,考虑一下组合模式吧。
finish!
下载源码:http://download.csdn.net/detail/github_22022001/8329277
在处理类似树形结构的问题时比较方便,就比如家里的家庭成员,老黑家的家谱如下:
老黑有两个儿子,一个叫大黑,一个叫二黑,看代码:
package com.freedom.composite; import java.util.Enumeration; import java.util.Vector; public class HeiErDai { private String name; private HeiErDai parent; private Vector<HeiErDai> children = new Vector<HeiErDai>(); public HeiErDai(String name){ this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } public HeiErDai getParent() { return parent; } public void setParent(HeiErDai parent) { this.parent = parent; } //添加孩子节点 public void add(HeiErDai node){ children.add(node); } //删除孩子节点 public void remove(HeiErDai node){ children.remove(node); } //取得孩子节点 public Enumeration<HeiErDai> getChildren(){ return children.elements(); } } package com.freedom.composite; import java.util.Enumeration; public class LaoHei { HeiErDai root = null; static String name = null; public LaoHei(String name){ root = new HeiErDai(name); this.name = name; } //输出各个节点 public void printNode(Enumeration<HeiErDai> elements){ for(; elements.hasMoreElements();) System.out.println(elements.nextElement().getName()); } public static void main(String[] args) { LaoHei tree = new LaoHei("老黑"); HeiErDai oldSon = new HeiErDai("oldSon是大黑……"); HeiErDai youngSon = new HeiErDai("youngSon是二黑……"); oldSon.add(youngSon); tree.root.add(oldSon); System.out.println("build the tree of "+name+"'s family:"); Enumeration<HeiErDai> e = tree.root.getChildren(); tree.printNode(e); Enumeration<HeiErDai> e2 = tree.root.getChildren(); tree.printNode(e2.nextElement().getChildren()); } } /* build the tree of 老黑's family: oldSon是大黑…… youngSon是二黑…… */看到了吧,黑二代无论是大黑还是二黑都是老黑的儿子。典型的二叉树模型,主要描述了儿子和父亲的关系,这就是组合模式。
组合模式有两种模式,透明模式和安全模式。上面说的这种是安全模式,透明模式是把用来组合使用的方法放到抽象类中,比如add(),remove()以及getChildren 等方法(顺便说一下,getChildren 一般返回的结果为Iterable的实现类,很多,大家可以看JDK 的帮助),不管叶子对象还是树枝对象都有相同的结构,通过判断是getChildren 的返回值确认是叶子节点还是树枝节点,如果处理不当,这个会在运行期出现问题的,不是很建议的方式;安全模式就不同了,它是把树枝节点和树叶节点彻底分开,树枝节点单独拥有用来组合的方法,这种方法比较安全,我们的例子使用了安全模式。
组合模式的优点有哪些呢?第一个优点只要是树形结构,就要考虑使用组合模式,这个一定记住,只要是要体现局部和整体的关系的时候,而且这种关系还可能比较深,考虑一下组合模式吧。
finish!
下载源码:http://download.csdn.net/detail/github_22022001/8329277
相关文章推荐
- Java23种设计模式案例:组合模式(Composite)
- Java开发中的23种设计模式之十一:组合模式(Composite)
- Java开发中的23种设计模式详解----组合模式(Composite)
- 【结构型模式】组合模式(Composite)之23种java设计模式
- java23种设计模式--组合模式(composite)
- JAVA设计模式:组合(Composite)
- java设计模式之组合模式Composite
- Java设计模式十六:组合模式(Composite Pattern)
- JAVA设计模式(20) —组合(Composite)模式
- Java设计模式之从[魔兽世界包裹系统]分析组合(Composite)模式
- Java设计模式透析之 —— 组合(Composite)
- Java设计模式之组合模式(Composite)
- Java设计模式透析之 —— 组合(Composite)
- java设计模式之Composite(组合) (转)
- 设计模式(八)----- 组合模式(Composite)----(JAVA版)
- Java设计模式(五)Facade(外观),Composite(组合),Decorator(油漆工)
- JAVA设计模式十七--Composite(组合模式)
- java23种设计模式中最常用的9种
- java 设计模式之: 组合模式(Composite)---1 【转】
- Java设计模式之组合模式(Composite)