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