定義:将對象組合成樹形結構以表示“部分整體”的層次結構。組合模式使得使用者對單個對象群組合對象的使用具有一緻性。(為具有上下級關系兩類 提供共同的接口,建立了屬性結構)
目的: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. }