最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

定義如下:

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

通用類圖如下:

組合模式的包含角色:

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

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

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

通用源代碼:

抽象構(gòu)件
public abstract class Component {
   //個(gè)體和整體都具有的共享
   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è)葉子構(gòu)件或樹枝構(gòu)件
   public void add(Component component){
       this.component Array List.add(component);
   }
   //刪除一個(gè)葉子構(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é)點(diǎn)是沒有子下級(jí)對(duì)象的對(duì)象,定義參加組合的原始對(duì)象行為。

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

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

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

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

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

組合模式的缺點(diǎn):

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

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

注意事項(xiàng):

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

總結(jié)

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

相關(guān)文章

  • Java如何實(shí)現(xiàn)自定義異常類

    Java如何實(shí)現(xiàn)自定義異常類

    這篇文章主要介紹了Java如何實(shí)現(xiàn)自定義異常類,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Java中數(shù)組的定義和使用教程(二)

    Java中數(shù)組的定義和使用教程(二)

    這篇文章主要給大家介紹了關(guān)于Java中數(shù)組的定義和使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • java設(shè)計(jì)模式之橋接模式(Bridge)

    java設(shè)計(jì)模式之橋接模式(Bridge)

    這篇文章主要為大家詳細(xì)介紹了java設(shè)計(jì)模式之橋接模式Bridge,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • Spring整合WebSocket應(yīng)用示例(上)

    Spring整合WebSocket應(yīng)用示例(上)

    以下教程是小編在參與開發(fā)公司的一個(gè)crm系統(tǒng),整理些相關(guān)資料,在該系統(tǒng)中有很多消息推送功能,在其中用到了websocket技術(shù)。下面小編整理分享到腳本之家平臺(tái)供大家參考
    2016-04-04
  • MybatisPlus調(diào)用原生SQL的實(shí)現(xiàn)方法

    MybatisPlus調(diào)用原生SQL的實(shí)現(xiàn)方法

    本文主要介紹了MybatisPlus調(diào)用原生SQL的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • java使用分隔符連接數(shù)組中每個(gè)元素的實(shí)例

    java使用分隔符連接數(shù)組中每個(gè)元素的實(shí)例

    今天小編就為大家分享一篇java使用分隔符連接數(shù)組中每個(gè)元素的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Spring容器獲取Bean的9種方式總結(jié)

    Spring容器獲取Bean的9種方式總結(jié)

    本文為大家整理匯總了常見的獲取Bean的方式,并提供一些優(yōu)劣分析,方便大家在使用到時(shí)有更好的選擇,同時(shí),也會(huì)為大家適當(dāng)?shù)钠占昂屯卣挂恍┫嚓P(guān)知識(shí),需要的可以參考一下
    2023-07-07
  • Java實(shí)現(xiàn)圖像分割功能

    Java實(shí)現(xiàn)圖像分割功能

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)圖像分割功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • 使用Java操作TensorFlow的方法

    使用Java操作TensorFlow的方法

    TensorFlow是一個(gè)功能強(qiáng)大且廣泛使用的框架,它不斷得到改進(jìn),并最近被引入新語言包括Java和JavaScript,這篇文章主要介紹了如何使用Java操作TensorFlow,需要的朋友可以參考下
    2023-05-05
  • java多線程編程實(shí)現(xiàn)下雪效果

    java多線程編程實(shí)現(xiàn)下雪效果

    這篇文章主要介紹了java多線程編程實(shí)現(xiàn)下雪效果的相關(guān)資料,需要的朋友可以參考下
    2015-11-11

最新評(píng)論

临桂县| 沐川县| 徐闻县| 阿瓦提县| 屏南县| 科技| 城固县| 忻城县| 漳浦县| 定兴县| 南投县| 旺苍县| 睢宁县| 奎屯市| 英吉沙县| 连城县| 玛纳斯县| 昭平县| 根河市| 安顺市| 通州区| 五华县| 吉木萨尔县| 彰化县| 吉林市| 临澧县| 安宁市| 湖北省| 志丹县| 二手房| 隆尧县| 修水县| 宁国市| 邹城市| 广宁县| 从化市| 宁明县| 新邵县| 宜丰县| 莱州市| 宁海县|