首页 > 代码库 > 《JAVA与模式》之组合模式
《JAVA与模式》之组合模式
定义(GoF《设计模式》):
将对象组合成树形结构以表示“部分整体”的层次结构。组合模式使得用户对单个对象和使用具有一致性。
及角色:
1.Component 是组合中的对象声明接口,在适当的情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理Component
子部件。
2.Leaf 在组合中表示叶子结点对象,叶子结点没有子结点。
3.Composite 定义有枝节点行为,用来存储子部件,在Component接口中实现与子部件有关操作,如增加(add)和删除
(remove)等。
1 public static void main(String[] args) { 2 3 Component component=new Composite("根节点"); 4 Component child=new Composite("一级子节点child"); 5 Component child_1=new Leaf("一级子节点child之子节点一"); 6 Component child_2=new Leaf("一级子节点child之子节点二"); 7 child.add(child_1); 8 child.add(child_2); 9 Component child2=new Composite("一级子节点child2");10 component.add(child);11 component.add(child2);12 component.foreach();13 }14 15 }16 abstract class Component { 17 18 String name;19 20 public Component(String s){21 22 this.name=s;23 }24 public abstract void add(Component c);25 public abstract void remove(Component c);26 public abstract void foreach();27 }28 //组合类29 class Composite extends Component{30 private List<Component>child=new ArrayList<Component>31 ();32 33 public Composite(String s) {34 super(s);35 // TODO Auto-generated constructor stub36 }37 38 @Override39 public void add(Component c) {40 child.add(c);41 42 }43 44 @Override45 public void foreach() {46 // TODO Auto-generated method stub47 System.out.println("节点名:\t"+name);48 for (Component c : child) {49 c.foreach();50 }51 }52 53 @Override54 public void remove(Component c) {55 // TODO Auto-generated method stub56 child.remove(c);57 }58 59 }60 //不在有根节点61 class Leaf extends Component{62 63 public Leaf(String s) {64 super(s);65 66 }67 68 @Override69 public void add(Component c) {70 // TODO Auto-generated method stub71 72 }73 @Override74 public void foreach() {75 System.out.println("tself name-->"+this.name);76 }77 78 @Override79 public void remove(Component c) {80 // TODO Auto-generated method stub81 82 }83 84 }
执行结果:
节点名: 根节点
节点名: 一级子节点child
tself name-->一级子节点child之子节点一
tself name-->一级子节点child之子节点二
节点名: 一级子节点child2
什么情况下使用组合模式
引用大话设计模式的片段:“当发现需求中是体现部分与整体层次结构时,以及你希望用户可以忽略组合对象与单个对象的不同,统一地使用组合结构中的所有对象时,就应该考虑组合模式了。”
参考地址:
http://blog.csdn.net/jason0539/article/details/22642281
http://blog.csdn.net/guolin_blog/article/details/9153753
http://www.2cto.com/kf/201206/137680.html
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。