欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

快速理解Java設(shè)計模式中的組合模式

 更新時間:2017年11月09日 11:30:01   作者:冷血之心的  
這篇文章主要介紹了快速理解Java設(shè)計模式中的組合模式,具有一定參考價值,需要的朋友可以了解下。

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

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

定義如下:

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

通用類圖如下:

組合模式的包含角色:

● Component 抽象構(gòu)件角色
定義參加組合對象的共有方法和屬性,可以定義一些默認(rèn)的行為或?qū)傩浴?/p>

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

● Composite 樹枝構(gòu)件
樹枝對象,它的作用是組合樹枝節(jié)點和葉子節(jié)點形成一個樹形結(jié)構(gòu)。

通用源代碼:

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

樹枝構(gòu)建

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

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

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

測試類負(fù)責(zé)樹狀結(jié)構(gòu)的建立,并可以通過遞歸方式遍歷整個樹。

public class Client {
   public static void main(String[] args) {
      //創(chuàng)建一個根節(jié)點
       Composite root = new Composite();
       root.do Something();
       //創(chuàng)建一個樹枝構(gòu)件
       Composite branch = new Composite();
       //創(chuàng)建一個葉子節(jié)點
       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){ //葉子節(jié)點
             c.do Something();
         }else{ //樹枝節(jié)點
             display((Composite)c);
         }
       }
   }
}

組合模式的優(yōu)點:

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

組合模式的缺點:

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

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

注意事項:

只要是樹形結(jié)構(gòu),就要考慮使用組合模式,這個一定要記住,只要是要體現(xiàn)局部和整體的關(guān)系的時候,而且這種關(guān)系還可能比較深,考慮一下組合模式吧。

總結(jié)

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

相關(guān)文章

  • java連接orcale數(shù)據(jù)庫示例分享

    java連接orcale數(shù)據(jù)庫示例分享

    這篇文章主要介紹了java連接orcale數(shù)據(jù)庫示例,需要的朋友可以參考下
    2014-02-02
  • SpringBoot使用AOP與注解實現(xiàn)請求參數(shù)自動填充流程詳解

    SpringBoot使用AOP與注解實現(xiàn)請求參數(shù)自動填充流程詳解

    面向切面編程(aspect-oriented programming,AOP)主要實現(xiàn)的目的是針對業(yè)務(wù)處理過程中的切面進(jìn)行提取,諸如日志、事務(wù)管理和安全這樣的系統(tǒng)服務(wù),從而使得業(yè)務(wù)邏輯各部分之間的耦合度降低,提高程序的可重用性,同時提高了開發(fā)的效率
    2023-02-02
  • java compare compareTo方法區(qū)別詳解

    java compare compareTo方法區(qū)別詳解

    本文主要介紹了java compare compareTo方法區(qū)別,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Java如何實現(xiàn)遠(yuǎn)程文件下載到本地目錄

    Java如何實現(xiàn)遠(yuǎn)程文件下載到本地目錄

    本文介紹了如何使用Java來實現(xiàn)遠(yuǎn)程文件的下載功能,主要通過HTTPS路徑下載文件到本地目錄,詳細(xì)介紹了相關(guān)代碼和測試步驟,并提供了實際案例供參考,本文旨在幫助需要實現(xiàn)文件下載功能的開發(fā)者快速掌握核心技術(shù)
    2024-10-10
  • Springboot Thymeleaf模板文件調(diào)用Java類靜態(tài)方法

    Springboot Thymeleaf模板文件調(diào)用Java類靜態(tài)方法

    這篇文章主要介紹了Springboot Thymeleaf模板文件調(diào)用Java類靜態(tài)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2007-09-09
  • 深入了解Java語言中的并發(fā)性選項有何不同

    深入了解Java語言中的并發(fā)性選項有何不同

    這篇文章主要介紹了深入了解Java語言中的并發(fā)性選項有何不同,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,,需要的朋友可以參考下
    2019-06-06
  • 從SpringMVC遷移到Springboot的方法步驟

    從SpringMVC遷移到Springboot的方法步驟

    本篇文章主要介紹了從SpringMVC遷移到Springboot的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • Java?swing創(chuàng)建一個窗口的簡單步驟

    Java?swing創(chuàng)建一個窗口的簡單步驟

    這篇文章主要給大家介紹了關(guān)于Java?swing創(chuàng)建一個窗口的簡單步驟,Java Swing是Java平臺下的GUI(Graphical User Interface,圖形用戶界面)工具包,提供了豐富的GUI組件,可以實現(xiàn)復(fù)雜的圖形界面應(yīng)用程序,需要的朋友可以參考下
    2024-06-06
  • Java 反射機(jī)制原理與用法詳解

    Java 反射機(jī)制原理與用法詳解

    這篇文章主要介紹了Java 反射機(jī)制原理與用法,結(jié)合實例形式詳細(xì)分析了java反射機(jī)制的相關(guān)概念、原理、使用方法及操作注意事項,需要的朋友可以參考下
    2019-12-12
  • Java單鏈表的增刪改查與面試題詳解

    Java單鏈表的增刪改查與面試題詳解

    單鏈表是鏈表的其中一種基本結(jié)構(gòu)。一個最簡單的結(jié)點結(jié)構(gòu)如圖所示,它是構(gòu)成單鏈表的基本結(jié)點結(jié)構(gòu)。在結(jié)點中數(shù)據(jù)域用來存儲數(shù)據(jù)元素,指針域用于指向下一個具有相同結(jié)構(gòu)的結(jié)點。 因為只有一個指針結(jié)點,稱為單鏈表
    2022-09-09

最新評論