标签:android c style class blog code
组合模式:将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
简单描述:1个Composite类,里面持有一个容器成员,容器可以存入自身
大话设计模式中的截图:
代码例子:
AbstractComponent类:
1 package com.longsheng.composite; 2 3 public abstract class AbstractComponent { 4 5 public abstract void addComp(AbstractComponent mAbstractComponent); 6 7 public abstract void removeComp(AbstractComponent mAbstractComponent); 8 9 public abstract void display(int depth); 10 11 }
Component类:
1 package com.longsheng.composite; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 public class Component extends AbstractComponent { 7 8 private List<AbstractComponent> container = new ArrayList<AbstractComponent>(); 9 private String name; 10 11 public Component(String name) { 12 this.name = name; 13 } 14 15 @Override 16 public void addComp(AbstractComponent mAbstractComponent) { 17 if(mAbstractComponent != null && mAbstractComponent == this) { 18 return;//不能添加自己否则会形成死循环 19 } 20 container.add(mAbstractComponent); 21 } 22 23 @Override 24 public void removeComp(AbstractComponent mAbstractComponent) { 25 if( mAbstractComponent != null && mAbstractComponent == this ) { 26 return; 27 } 28 container.remove(mAbstractComponent); 29 } 30 31 @Override 32 public void display(int depth) { 33 String temp = ""; 34 for (int i = 0; i < depth; i++) { 35 temp += "-"; 36 } 37 System.out.println(temp + name); 38 for (AbstractComponent mComponent : container) { 39 mComponent.display(depth + 2); 40 } 41 } 42 43 }
Leaf类:
1 package com.longsheng.composite; 2 3 public class Leaf extends AbstractComponent { 4 5 private String name; 6 7 public Leaf( String name ) { 8 this.name = name; 9 } 10 11 @Override 12 public void addComp(AbstractComponent mAbstractComponent) { 13 } 14 15 @Override 16 public void removeComp(AbstractComponent mAbstractComponent) { 17 } 18 19 @Override 20 public void display(int depth) { 21 String temp = ""; 22 for (int i = 0; i < depth; i++) { 23 temp += "-"; 24 } 25 System.out.println(temp + name); 26 } 27 28 }
客户端:
1 package com.longsheng.composite; 2 3 public class Client { 4 5 public static void main(String args[]) { 6 Component mRoot = new Component("总公司"); 7 Leaf mRootHR = new Leaf("总公司人力资源部"); 8 Leaf mRootFinance = new Leaf("总公司财务部"); 9 mRoot.addComp(mRootHR); 10 mRoot.addComp(mRootFinance); 11 12 Component mSub = new Component("华东分公司"); 13 Leaf mSubHR = new Leaf("华东分公司人力资源部"); 14 Leaf mSubFinance = new Leaf("华东分公司财务部"); 15 mSub.addComp(mSubHR); 16 mSub.addComp(mSubFinance); 17 18 Component mNanjing = new Component("南京分公司"); 19 Leaf mNanjingHR = new Leaf("南京分公司人力资源部"); 20 Leaf mNanjingFinance = new Leaf("南京分公司财务部"); 21 mNanjing.addComp(mNanjingHR); 22 mNanjing.addComp(mNanjingFinance); 23 24 Component mHangzhou = new Component("杭州分公司"); 25 Leaf mHangzhouHR = new Leaf("杭州分公司人力资源部"); 26 Leaf mHangzhouFinance = new Leaf("杭州分公司财务部"); 27 mHangzhou.addComp(mHangzhouHR); 28 mHangzhou.addComp(mHangzhouFinance); 29 30 mRoot.addComp(mSub); 31 mSub.addComp(mNanjing); 32 mSub.addComp(mHangzhou); 33 34 mRoot.display(0); 35 } 36 37 }
运行结果:
1 总公司 2 --总公司人力资源部 3 --总公司财务部 4 --华东分公司 5 ----华东分公司人力资源部 6 ----华东分公司财务部 7 ----南京分公司 8 ------南京分公司人力资源部 9 ------南京分公司财务部 10 ----杭州分公司 11 ------杭州分公司人力资源部 12 ------杭州分公司财务部
Leaf类可以不必继承AbstractComponent类,以和树枝节点区分开,这需要在具体业务中进行选择。
这个模式在图形控件中经常使用,如在Android中,ViewGroup是View的子类,ViewGroup可以装入View;在Java—AWT中,JPanel是一个Component,同时有个add方法可以装入Component
大话设计模式_组合模式(Java代码),布布扣,bubuko.com
标签:android c style class blog code
原文地址:http://www.cnblogs.com/creasylai19/p/3776359.html