一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務(wù)器之家 - 編程語言 - JAVA教程 - 快速理解Java設(shè)計(jì)模式中的組合模式

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

2021-02-02 11:34冷血之心 JAVA教程

這篇文章主要介紹了快速理解Java設(shè)計(jì)模式中的組合模式,具有一定參考價(jià)值,需要的朋友可以了解下。

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

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

定義如下:

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

通用類圖如下:

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

組合模式的包含角色:

● 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)。

通用源代碼:

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

樹枝構(gòu)建

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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ì)象行為。

?
1
2
3
4
5
6
7
8
9
10
樹葉構(gòu)件
public class Leaf extends Component {
   /*
   *
可以覆寫父類方法
   * public void do Something(){
   *
   * }
   */
}

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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)用簡(jiǎn)單
一棵樹形機(jī)構(gòu)中的所有節(jié)點(diǎn)都是Component,局部和整體對(duì)調(diào)用者來說沒有任何區(qū)別,也就是說,高層模塊不必關(guān)心自己處理的是單個(gè)對(duì)象還是整個(gè)組合結(jié)構(gòu),簡(jiǎn)化了高層模塊的代碼。
● 節(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ì)模式中的組合模式的全部?jī)?nèi)容,希望對(duì)大家有所幫助。有什么問題可以隨時(shí)留言,小編會(huì)及時(shí)回復(fù)大家的。感謝朋友們對(duì)本站的支持!

原文鏈接:https://www.2cto.com/kf/201609/546832.html

延伸 · 閱讀

精彩推薦
  • JAVA教程Java處理日期時(shí)間的方法匯總

    Java處理日期時(shí)間的方法匯總

    這篇文章主要給大家介紹了利用Java中的Calendar 類處理日期時(shí)間的方法匯總,其中包括取日期的每部分、取當(dāng)月的第一天或最后一天、求兩個(gè)日期之間相隔的...

    ggjucheng3912020-07-16
  • JAVA教程Java基于socket實(shí)現(xiàn)簡(jiǎn)易聊天室實(shí)例

    Java基于socket實(shí)現(xiàn)簡(jiǎn)易聊天室實(shí)例

    這篇文章主要介紹了Java基于socket實(shí)現(xiàn)簡(jiǎn)易聊天室的方法,實(shí)例分析了java基于socket實(shí)現(xiàn)聊天室服務(wù)端與客戶端的相關(guān)技巧,需要的朋友可以參考下 ...

    wo_soul3692019-12-19
  • JAVA教程java開發(fā)flyway的方法

    java開發(fā)flyway的方法

    這篇文章主要介紹了java開發(fā)flyway的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下...

    幕友皎敖奔乾2542020-07-25
  • JAVA教程java的引用類型的詳細(xì)介紹

    java的引用類型的詳細(xì)介紹

    在java中提供了4個(gè)級(jí)別的引用:強(qiáng)引用、軟引用、弱引用、虛引用。其中強(qiáng)引用FinalReference是default個(gè)飾符來修飾,其它3個(gè)級(jí)別均為public修飾 ...

    java之家4272019-10-15
  • JAVA教程Java中字符編碼格式詳解

    Java中字符編碼格式詳解

    在java應(yīng)用軟件中,會(huì)有多處涉及到字符集編碼,有些地方需要進(jìn)行正確的設(shè)置,有些地方需要進(jìn)行一定程度的處理。本文主要給大家講解java中字符的編碼...

    leesf3132020-04-12
  • JAVA教程詳解spring整合shiro權(quán)限管理與數(shù)據(jù)庫設(shè)計(jì)

    詳解spring整合shiro權(quán)限管理與數(shù)據(jù)庫設(shè)計(jì)

    這篇文章主要介紹了詳解spring整合shiro權(quán)限管理與數(shù)據(jù)庫設(shè)計(jì),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧...

    小爺胡漢三4462020-10-27
  • JAVA教程Java實(shí)現(xiàn)批量導(dǎo)入excel表格數(shù)據(jù)到數(shù)據(jù)庫中的方法

    Java實(shí)現(xiàn)批量導(dǎo)入excel表格數(shù)據(jù)到數(shù)據(jù)庫中的方法

    這篇文章主要介紹了Java實(shí)現(xiàn)批量導(dǎo)入excel表格數(shù)據(jù)到數(shù)據(jù)庫中的方法,結(jié)合實(shí)例形式詳細(xì)分析了java導(dǎo)入Excel數(shù)據(jù)到數(shù)據(jù)庫的具體步驟與相關(guān)操作技巧,需要的...

    CharlinGod3782021-01-27
  • JAVA教程springboot掃描自定義的servlet和filter代碼詳解

    springboot掃描自定義的servlet和filter代碼詳解

    本文是一篇根據(jù)作者工作經(jīng)歷總結(jié)出來的關(guān)于springboot掃描自定義的servlet和filter代碼詳解的文章,小編覺得非常不錯(cuò),這里給大家分享下,和朋友們一起學(xué)...

    葉長(zhǎng)風(fēng)7802021-01-16
主站蜘蛛池模板: 国产精品午夜剧场 | 91精品国产美女福到在线不卡 | 女子监狱第二季在线观看免费完整版 | 国产91精品露脸国语对白 | 乌克兰17一18处交 | 九九99靖品 | 日韩精品一区二区三区视频 | 高h文恩好大好爽 | 国产免费午夜高清 | 第一国内永久免费福利视频 | 99re热 | 97视频久久| 国语自产自拍秒拍在线视频 | 久久中文电影 | 色婷婷激婷婷深爱五月老司机 | 国产一级黄色录像 | 欧美一卡二卡科技有限公司 | 天堂成人影院 | 国产在线观看精品 | 校花小雪灌满了男人们的浓浆 | 亚洲AV精品一区二区三区不卡 | 太粗 好紧 使劲舒服 | 欧美一卡2卡3卡无卡 | 日韩成人小视频 | 情缘1完整版在线观看 | 国产在线精品香蕉综合网一区 | 色综合97天天综合网 | 特黄特级高清免费视频毛片 | 国产成人综合亚洲亚洲欧美 | 韩国三级日本三级香港三级黄 | 亚洲四虎 | 91制片在线观看 | 日本精品久久久久久久久免费 | 热久久天天拍天天拍热久久2018 | 午夜福到在线4国产 | 苍井空色欲迷墙 | 99热最新| 天天综合五月天 | 体检小说| 99精品国产高清一区二区三区香蕉 | 99热免费在线观看 |