世界上并没有完美的程序,但我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。
- 意图
保证客户端调用单对象与组合对象的一致性。适用:具有相同功能的树形母子机构。 - 类图
- 实例
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);
}
}
- 测试
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