組合模式(Composite Pattern)對象
我的理解:組合模式就是在建立對象的時候加上屬性 接口
private List<Employee> subordinates;
以及加上對應的添加和get方法rem
public void add(Employee e) { subordinates.add(e); } public void remove(Employee e) { subordinates.remove(e); } public List<Employee> getSubordinates(){ return subordinates; }
這樣在就能夠把一組類似的對象看成一個單一的對象,而後進行相應的處理get
意圖:將對象組合成樹形結構以表示"部分-總體"的層次結構。組合模式使得用戶對單個對象和組合對象的使用具備一致性。it
主要解決:它在咱們樹型結構的問題中,模糊了簡單元素和複雜元素的概念,客戶程序能夠向處理簡單元素同樣來處理複雜元素,從而使得客戶程序與複雜元素的內部結構解耦。List
什麼時候使用: 一、您想表示對象的部分-總體層次結構(樹形結構)。 二、您但願用戶忽略組合對象與單個對象的不一樣,用戶將統一地使用組合結構中的全部對象。程序
如何解決:樹枝和葉子實現統一接口,樹枝內部組合該接口。方法
關鍵代碼:樹枝內部組合該接口,而且含有內部屬性 List,裏面放 Component。di
應用實例: 一、算術表達式包括操做數、操做符和另外一個操做數,其中,另外一個操做符也能夠是操做樹、操做符和另外一個操做數。 二、在 JAVA AWT 和 SWING 中,對於 Button 和 Checkbox 是樹葉,Container 是樹枝。文件
優勢: 一、高層模塊調用簡單。 二、節點自由增長。
缺點:在使用組合模式時,其葉子和樹枝的聲明都是實現類,而不是接口,違反了依賴倒置原則。
使用場景:部分、總體場景,如樹形菜單,文件、文件夾的管理。