23种设计模式之组合模式

优点:一致处理对象以及对象容器。
缺点:使得设计变得更加复杂。
组合模式一般处理树形结构,如下图。


23种设计模式之组合模式_第1张图片
image.png

组合模式核心:

  • Component(抽象构件):定义叶子和容器的共同点。
  • Leaf(叶子构件):无子节点都称为叶子。
  • Composite(容器构件):用于存储子节点(叶子)。

模拟一个公司工作的例子。
首先创建一个Component(抽象构件):

/**
 * 这是一个Component(抽象构件)
 */

public interface Component {
    void work();
}

然后Leaf(叶子构件):

/**
 * 这是一个Leaf(叶子构件)
 */

public class Leaf implements Component {

    private String name;

    public Leaf(String name) {
        this.name = name;
    }

    @Override
    public void work() {
        Log.d("TAG", name + "在工作");
    }
}

然后是Composite(容器构件):

import android.util.Log;

import java.util.ArrayList;
import java.util.List;

/**
 * 这是一个Composite容器构件
 */

public class Composite implements Component {

    private String name;
    private List list = new ArrayList<>();//用于存储子节点

    public Composite(String name) {
        this.name = name;
    }

    //新增方法
    public void add(Component c) {
        list.add(c);
    }

    //删除方法
    public void remove(Component c) {
        list.remove(c);
    }

    //获取子节点方法
    public Component getChild(int index) {
        return list.get(index);
    }

    @Override
    public void work() {
        Log.d("TAG", name + "在工作");
        for (Component component : list) {
            component.work();
        }
    }
}

调用:

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.FragmentActivity;

/**
 * 这是调用者
 */

public class MainActivity extends FragmentActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //添加一家公司,在公司中添加一个部门,在部门中添加人员
        Composite company, department;
        company = new Composite("***科技有限公司");
        department = new Composite("软件部");
        Leaf person = new Leaf("张三");
        company.add(department);
        department.add(person);

        company.work();
    }
}

结果:
image.png

已完成测试!有不对的地方欢迎指出,感恩。

你可能感兴趣的:(23种设计模式之组合模式)