91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

快速理解Java設計模式中的組合模式

發布時間:2020-09-29 18:44:12 來源:腳本之家 閱讀:183 作者:冷血之心的 欄目:編程語言

組合模式是一種常見的設計模式(但我感覺有點復雜)也叫合成模式,有時又叫做部分-整體模式,主要是用來描述部分與整體的關系。

個人理解:組合模式就是將部分組裝成整體。

定義如下:

將對象組合成樹形結構以表示“部分-整體”的層次結構,使得用戶對單個對象和組合對象的使用具有一致性。

通用類圖如下:

快速理解Java設計模式中的組合模式

組合模式的包含角色:

● Component 抽象構件角色
定義參加組合對象的共有方法和屬性,可以定義一些默認的行為或屬性。

● Leaf 葉子構件
葉子對象,其下再也沒有其他的分支,也就是遍歷的最小單位。

● Composite 樹枝構件
樹枝對象,它的作用是組合樹枝節點和葉子節點形成一個樹形結構。

通用源代碼:

抽象構件
public abstract class Component {
   //個體和整體都具有的共享
   public void do Something(){
       //編寫業務邏輯
   }
}

樹枝構建

public class Composite extends Component {
   //構件容器
   private Array List<component> component Array List = new Array List<component>()
   //增加一個葉子構件或樹枝構件
   public void add(Component component){
       this.component Array List.add(component);
   }
   //刪除一個葉子構件或樹枝構件
   public void remove(Component component){
       this.component Array List.remove(component);
   }  
 //獲得分支下的所有葉子構件和樹枝構件
   public Array List<component> get Children(){
       return this.component Array List;
   }
}

樹葉節點是沒有子下級對象的對象,定義參加組合的原始對象行為。

樹葉構件
public class Leaf extends Component {
   /*
   * 
可以覆寫父類方法
   * public void do Something(){
   * 
   * }
   */
}

測試類負責樹狀結構的建立,并可以通過遞歸方式遍歷整個樹。

public class Client {
   public static void main(String[] args) {
      //創建一個根節點
       Composite root = new Composite();
       root.do Something();
       //創建一個樹枝構件
       Composite branch = new Composite();
       //創建一個葉子節點
       Leaf leaf = new Leaf();
       //建立整體
       root.add(branch);
       branch.add(leaf);     
   }
   //通過遞歸遍歷樹
   public static void display(Composite root){
       for(Component c:root.get Children()){
         if(c instanceof Leaf){ //葉子節點
             c.do Something();
         }else{ //樹枝節點
             display((Composite)c);
         }
       }
   }
}

組合模式的優點:

● 高層模塊調用簡單
一棵樹形機構中的所有節點都是Component,局部和整體對調用者來說沒有任何區別,也就是說,高層模塊不必關心自己處理的是單個對象還是整個組合結構,簡化了高層模塊的代碼。
● 節點自由增加
使用了組合模式后,我們可以看看,如果想增加一個樹枝節點、樹葉節點是不是都很容易,只要找到它的父節點就成,非常容易擴展,符合開閉原則,對以后的維護非常有利。

組合模式的缺點:

組合模式有一個非常明顯的缺點,看到我們在場景類中的定義,提到樹葉和樹枝使用時的定義了嗎?直接使用了實現類!這在面向接口編程上是很不恰當的,與依賴倒置原則沖突,讀者在使用的時候要考慮清楚,它限制了你接口的影響范圍。

使用場景:
● 維護和展示部分-整體關系的場景,如樹形菜單、文件和文件夾管理。
● 從一個整體中能夠獨立出部分模塊或功能的場景。

注意事項:

只要是樹形結構,就要考慮使用組合模式,這個一定要記住,只要是要體現局部和整體的關系的時候,而且這種關系還可能比較深,考慮一下組合模式吧。

總結

以上就是本文關于快速理解Java設計模式中的組合模式的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站:Java設計模式——工廠設計模式詳解、Java設計模式之訪問者模式使用場景及代碼示例、Java設計模式筆記之抽象工廠代碼示例等,有什么問題可以隨時留言,小編會及時回復大家的。感謝朋友們對本站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

读书| 调兵山市| 故城县| 宣武区| 清远市| 彭水| 邢台市| 呼伦贝尔市| 惠水县| 渝中区| 梁河县| 永安市| 邢台市| 连平县| 买车| 石狮市| 嘉义市| 尉氏县| 沁源县| 什邡市| 盐津县| 阜康市| 镇赉县| 北宁市| 株洲县| 大渡口区| 台中县| 南昌市| 陆丰市| 茂名市| 金堂县| 内黄县| 武平县| 绥化市| 阳原县| 西和县| 钦州市| 安吉县| 搜索| 石阡县| 黄浦区|