天天看點

組合模式

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

目的: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. }      

繼續閱讀