定義:
對象組合成部分整體結構,單個對象和組合對象具有一致性。
看了下大概結構就是集團總公司和子公司那種層級結構。
實現樹狀嵌套結構。
Component :抽象根節點:其實相當去總公司,抽象子類共有的方法;
Composite :相當於總公司的智能部門,也分管子公司,通過集合存儲子節點對象,提供增刪獲取子節點對象的方法;
leaf:子節點,相當於集團子公司,總公司具有的智能,子公司也具有,因此子節點具有總節點擁有的所有抽象方法以及提供給子類的方法。
Client:通過抽象跟節點操作子節點的對象。
public abstract class Component { protected String name; public Component(String name) { this.name = name; } public abstract void doSomething(); }
import java.util.ArrayList; import java.util.List; /** * 具體枝干節點 * Created by Administrator on 2016/9/3. */ public class Composite extends Component { private List<Component> components = new ArrayList<>(); public Composite(String name) { super(name); } //新增子公司 public void addChild(Component component) { components.add(component); } //撤除子公司 public void remove(Component component) { components.remove(component); } //獲取某個子公司對象信息 public void getChild(int index) { components.get(index); } @Override public void doSomething() { System.out.println(name); for (int i = 0; i < components.size(); i++) { components.get(i).doSomething(); } } }
public class Leaf extends Component { public Leaf(String name) { super(name); } //相當於輸出子公司名稱 @Override public void doSomething() { System.out.println(name); } }
運行結果:
public class Test { public static void main(String[] args) { Composite composite = new Composite("composite"); Composite composite1 = new Composite("composite1"); Composite composite2 = new Composite("composite1"); Leaf leaf = new Leaf("leaf1"); Leaf leaf2 = new Leaf("leaf2"); composite1.addChild(leaf); composite2.addChild(leaf2); composite.addChild(composite1); composite.addChild(composite2); composite.doSomething(); } }
實際項目中的使用:
android源碼里面使用到組合模式就是View和ViewGroup的嵌套組合。
還是很粗糙,以后使用過程中慢慢體會吧
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。