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

服務器之家:專注于服務器技術及軟件下載分享
分類導航

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

服務器之家 - 編程語言 - JAVA教程 - 快速理解Java設計模式中的組合模式

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

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

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

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

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

定義如下:

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

通用類圖如下:

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

組合模式的包含角色:

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

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

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

通用源代碼:

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

樹枝構建

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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;
   }
}

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

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

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

?
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) {
      //創建一個根節點
       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設計模式中的組合模式的全部內容,希望對大家有所幫助。有什么問題可以隨時留言,小編會及時回復大家的。感謝朋友們對本站的支持!

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

延伸 · 閱讀

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

    Java處理日期時間的方法匯總

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

    ggjucheng3912020-07-16
  • JAVA教程Java基于socket實現簡易聊天室實例

    Java基于socket實現簡易聊天室實例

    這篇文章主要介紹了Java基于socket實現簡易聊天室的方法,實例分析了java基于socket實現聊天室服務端與客戶端的相關技巧,需要的朋友可以參考下 ...

    wo_soul3692019-12-19
  • JAVA教程java開發flyway的方法

    java開發flyway的方法

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

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

    java的引用類型的詳細介紹

    在java中提供了4個級別的引用:強引用、軟引用、弱引用、虛引用。其中強引用FinalReference是default個飾符來修飾,其它3個級別均為public修飾 ...

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

    Java中字符編碼格式詳解

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

    leesf3132020-04-12
  • JAVA教程詳解spring整合shiro權限管理與數據庫設計

    詳解spring整合shiro權限管理與數據庫設計

    這篇文章主要介紹了詳解spring整合shiro權限管理與數據庫設計,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧...

    小爺胡漢三4462020-10-27
  • JAVA教程Java實現批量導入excel表格數據到數據庫中的方法

    Java實現批量導入excel表格數據到數據庫中的方法

    這篇文章主要介紹了Java實現批量導入excel表格數據到數據庫中的方法,結合實例形式詳細分析了java導入Excel數據到數據庫的具體步驟與相關操作技巧,需要的...

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

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

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

    葉長風7802021-01-16
主站蜘蛛池模板: 太深了 太粗h1v1 | 蘑菇香蕉茄子绿巨人丝瓜草莓 | 我在厨房摸岳的乳HD在线观看 | 天天操天天干天天 | 黑人女性猛交xxxxxⅹxx | 无删减影视免费观看 | 国产精品亚洲片在线不卡 | 女学生被老师调教在教室 | 精油按摩日本 | 草莓视频幸福宝 | 国内精品伊人久久大香线焦 | 好深快点再快点好爽视频 | poronovideos极度变态 | 三级无删减高清在线影院 | 四虎在线永久视频观看 | 关晓彤被调教出奶水的视频 | 校花被强迫np肉高h 校服下的白嫩小乳尖h1v1 | 四虎影库网址 | 亚洲日韩精品欧美一区二区 | 国产人成激情视频在线观看 | 亚洲精品卡一卡2卡3卡4卡 | 99在线观看免费视频 | 性派对videos18party| tkvk视频 | 久久午夜夜伦痒痒想咳嗽P 久久无码AV亚洲精品色午夜麻豆 | 亚洲男人的天堂网 | 国产视频a区| chinese男性厕所撒尿合集 | 日本一区免费观看 | 欧美怡红院视频一区二区三区 | 日本网 | 贤妻良母电影日本 | 羞羞影院午夜男女爽爽影院网站 | 国产伦精品一区二区 | 欧美一级欧美三级 | 色综合天天综合中文网 | 日本大尺度激情做爰叫床 | 日韩免费在线看 | 精品四虎国产在免费观看 | 高清一区| 99视频免费 |