設計模式 -- 組合模式 (Composite Pattern)


   定義

  對象組合成部分整體結構,單個對象和組合對象具有一致性。

   看了下大概結構就是集團總公司和子公司那種層級結構。

  實現樹狀嵌套結構。

  角色介紹:

  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();
    }
}

 實際項目中的使用:

  1. 比如對sd卡文件和文件夾的操作上其實就可以使用該設計模式:
  2. 定義一個抽象類表示文件和文件夾,包含對文件增加,刪除,遍歷的抽象方法;
  3. 文件夾類繼承自1中的抽象類,並實現抽象類中的抽象方法;
  4. 文件類繼承自1中的抽象類,並實現抽象類中的抽象方法;

 android源碼里面使用到組合模式就是View和ViewGroup的嵌套組合。

還是很粗糙,以后使用過程中慢慢體會吧


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: