(设计模式)组合模式

将对象组合成树形结构用以表示“部分-整体”的层次结构。“Composite” 使得用户对单个对象和组合对象的使用具有一致性。

想表示对象的部分 - 整体 层次结构。

希望用户忽略可以忽略组合对象和单个对象之间的差距不同,可以统一的使用组合结构中的所有对象。

呈树形结构。 

Composite 组合中的对象接口,在通用情况下,实现所有类的通用的默认行为。

public abstract class Employer {
    public List employers;
    public void printInfo() {
        System.out.println(name);
    }
    public List getEmployers() {
        return this.employers;
    }
    public abstract void add(Employer employer);
    public abstract void delete(Employer employer);
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Leaf 子节点,在组合中表示叶节点对象,叶节点是没有子节点的,所以集合为空。定义节点对象的行为。

public class Programmer extends Employer {

    public Programmer(String name) {
        setName(name);
        employers = null;//没有下属
    }

    @Override
    public void add(Employer employer) {

    }

    @Override
    public void delete(Employer employer) {

    }
}
Composite 节点管理,存储子节点,和对子节点进行管理和维护的行为方法。
public class ProjectManager extends Employer {

    public ProjectManager(String  name){
        setName(name);
        employers = new ArrayList();
    }

    @Override
    public void add(Employer employer) {
        employers.add(employer);
    }

    @Override
    public void delete(Employer employer) {
        employers.remove(employer);
    }
}

 测试

创建子节点,并添加到管理节点对象上,使用管理对象,统一管理和使用。

 public static void main(String[] args){
        Employer pm = new ProjectManager("项目经理");
        Employer pa = new ProjectAssistant("助理");
        Employer programmer = new Programmer("程序员");
        pm.add(pa);
        pm.add(programmer);
        List<Employer> ems = pm.getEmployers();
        for(Employer em : ems) {
            System.out.println(em.getName());
        }
    }

通过组合模式,把不同的对象统一起来,并添加到统一的管理对象下,统一管理。可以创建不同的管理对象,通过集合,并在下面继续添加不同的子节点对象。整体呈树形结构排列。

原文地址:https://www.cnblogs.com/xiaohuihui96/p/7145823.html