什么是合成模式(Composite)?

278 阅读1分钟

世界上并没有完美的程序,但我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。

  1. 意图
    保证客户端调用单对象与组合对象的一致性。适用:具有相同功能的树形母子机构。
  2. 类图
    在这里插入图片描述
  3. 实例
public interface Component {
    void sayHello();
}

class Leaf implements Component{
    private String name;
    public Leaf(String name){
        this.name = name;
    }

    @Override
    public void sayHello() {
        System.out.println(name);
    }
}

class Composite implements Component{
    private String name;
    public Composite(String name){
        this.name = name;
    }
    List<Component> componentList = new ArrayList<>();
    @Override
    public void sayHello() {
        System.out.println(name);
    }

    public void addPart(Component component){
        componentList.add(component);
    }
}
  1. 测试
class TestClass{
    public static void main(String[] args){
        Composite composite = new Composite("总部");
        Composite part1 = new Composite("分部1");
        part1.addPart(new Leaf("小分部1"));
        composite.addPart(part1);
        composite.addPart(new Leaf("分部2"));
        composite.addPart(new Leaf("分部3"));

        composite.sayHello();
        composite.componentList.forEach(
                component -> {
                    component.sayHello();
                    if(component instanceof Composite){
                        ((Composite) component).componentList.forEach(Component::sayHello);
                    }
                }
        );

    }
}

运行结果:

总部
分部1
小分部1
分部2
分部3

想看更多吗?请访问:设计模式