定义:将对象组合成树形结构以表示“部分整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。(为具有上下级关系两类 提供共同的接口,创建了属性结构)
目的:1.使两个对象拥有属性结构。
2.使上下级的类拥有相同的接口。
优点:1.屏蔽了类的不一致,客户可以通过相同的方式调用不同的层级。
2.对客户实现了封装
3.提供了统一的接口
缺点:1.其叶子和树枝的声明都是实现类,而不是接口,违反了依赖倒转原则
2. 使得设计更加复杂。客户端需要花更多时间理清类之间的层次关系
类图:
代码:
component(上级关系类的共同抽象类)
public abstract class ComponentPerson {
protected String name;
public ComponentPerson (String name) {
this.name = name;
}
//进行招聘
public abstract void recruitPerson();
//解雇
public abstract void firePerson();
//工作
public abstract void work(int depth);
}
left(子类 员工类)
public class Leaf extends ComponentPerson {
public Leaf(String name) {
super(name);
}
@Override
public void recruitPerson() {
//不能招聘
throw new Exception();
}
@Override
public void firePerson() {
//不能解雇
throw new Exception();
}
@Override
public void work() {
System.out.println("努力当员工");
}
}
Composite(父类 老板类)
public class Composite extends ComponentPerson {
public Composite(String name) {
super(name);
}
@Override
public void recruitPerson() {
System.out.println("小伙子我看好你");
}
@Override
public void firePerson() {
System.out.println("对不起 你被开除了");
}
@Override
public void work() {
System.out.println("努力当好老板");
}
}