設計模式的定義

1?組合模式:

整體-部分模式,它是一種將對象組合成樹狀層次結構的模式,用來表示整體和部分的關系,使用戶對單個對象和組合對象具有一致的訪問性,屬于結構型設計模式

1.1 特點:

  1. 組合模式使得客戶端代碼可以一致的處理單個對象和組合對象
  2. 更容易在組合體內加入新的對象,客戶端不會因為加入新的對象而改變原代碼,滿足''開閉原則''

1.2 缺點:

  1. 設計較復雜,客戶端需要花更多的時間理清類之間的關系
  2. 不容易限制容器中的構建
  3. 不容易用繼承的方法來增加構件的新功能?

1.3 結構:

  1. 抽象構件角色:
  2. 樹葉構件角色:
  3. 樹枝構件角色/中間構件:?

1.4 組合模式分為透明式的組合模式和安全式的組合模式。?

  1. 透明式:抽象構件聲明了所有子類中的全部方法,客戶端無需區別樹葉對象和樹枝對象
  2. 安全式:將管理子構件的方法移到樹枝構件中,抽象構件和樹葉構件沒有對子對象的管理方法

1.5 代碼實現

透明模式

public class CompositePattern {public static void main(String[] args) {Component c0 = new Composite();Component c1 = new Composite();Component leaf1 = new Leaf("1");Component leaf2 = new Leaf("2");Component leaf3 = new Leaf("3");c0.add(leaf1);c0.add(c1);c1.add(leaf2);c1.add(leaf3);c0.operation();}
}
//抽象構件
interface Component {public void add(Component c);public void remove(Component c);public Component getChild(int i);public void operation();
}
//樹葉構件
class Leaf implements Component {private String name;public Leaf(String name) {this.name = name;}public void add(Component c) {}public void remove(Component c) {}public Component getChild(int i) {return null;}public void operation() {System.out.println("樹葉" + name + ":被訪問!");}
}
//樹枝構件
class Composite implements Component {private ArrayList<Component> children = new ArrayList<Component>();public void add(Component c) {children.add(c);}public void remove(Component c) {children.remove(c);}public Component getChild(int i) {return children.get(i);}public void operation() {for (Object obj : children) {((Component) obj).operation();}}
}
樹葉1:被訪問!
樹葉2:被訪問!
樹葉3:被訪問!

安全模式

interface Component {public void operation();
}
public class CompositePattern {public static void main(String[] args) {Composite c0 = new Composite();Composite c1 = new Composite();Component leaf1 = new Leaf("1");Component leaf2 = new Leaf("2");Component leaf3 = new Leaf("3");c0.add(leaf1);c0.add(c1);c1.add(leaf2);c1.add(leaf3);c0.operation();}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/208684.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/208684.shtml
英文地址,請注明出處:http://en.pswp.cn/news/208684.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【數據挖掘】工具整理 - 期刊 - 會議 - 論壇/博客 - 數據集

文章目錄 1 期刊2 會議3 論壇/博客4 數據集 1 期刊 Data Mining and Knowledge Discovery (DMKD)IEEE Transactions on Knowledge and Data Engineering (TKDE)Knowledge and Information Systems(KAIS)IEEE Transactions on Pattern Analysis and Machine Intelligence (TPAM…

二叉樹的遍歷之迭代遍歷

前言&#xff1a;在學習二叉樹的時候我們基本上已經了解過二叉樹的三種遍歷&#xff0c;對于這三種遍歷&#xff0c;我們采用遞歸的思路&#xff0c;很簡單的就能實現&#xff0c;那么如何用迭代的方法去解決問題&#xff1f; 我們首先來看第一個&#xff1a; 前序遍歷 144.…

【計算機網絡學習之路】HTTP請求

目錄 前言 HTTP請求報文格式 一. 請求行 HTTP請求方法 GET和POST的區別 URL 二. 請求頭 常見的Header 常見的額請求體數據類型 三. 請求體 結束語 前言 HTTP是應用層的一個協議。實際我們訪問一個網頁&#xff0c;都會像該網頁的服務器發送HTTP請求&#xff0c;服務…

chrome 調試之 - 給微軟小冰看病(無論給小冰發送什么內容都只回復“我已經開始升級啦,期待一下吧!”)

微軟 Bing 搜索推出了小冰AI智能聊天模塊&#xff0c;具體啟用方式是用edge或chrome瀏覽器打開鏈接 cn.bing.com 后在輸入框搜索任意內容&#xff0c;待搜索結果頁面加載完并稍等片刻&#xff0c;頁面右側就會出現一個躲在滾動條后面的小蘿莉&#xff0c;撫摸...不&#xff0c;…

Java-網絡通信總結

文章目錄 網絡程序設計基礎局域網與互聯網 網絡協議IP協議TCP/IP 協議端口域套接字 TCP 程序InterAddress 類ServerSocket 類 UDP 程序DatagramPacket 類DatagramSocket 類 網絡程序設計基礎 網絡程序設計編寫的是與其他計算機進行通信的程序。Java 已經將網絡程序所需要的元素…

RK3588平臺開發系列講解(hardware)reference-ril源碼分析

平臺內核版本安卓版本RK3588Linux 5.10Android 12文章目錄 一、reference-ril目錄介紹二、支持的功能三、Android RIL 框架沉淀、分享、成長,讓自己和他人都能有所收獲!?? 一、reference-ril目錄介紹 目錄:3588-android12/hardware/ril/reference-ril

ElementUI 時間選擇器如何限定選擇時間

DatePicker 日期選擇器 | Element Plus 我們如何限定我們的選擇時間呢&#xff0c;比如限定選擇時間為今天之前&#xff0c;或者今天之后的時間&#xff1f; 我們可以使用官方提供的disabled-date來實現 我們通過這個屬性 做一個回調函數&#xff0c;在里面比較我們想要限定的時…

MongoDB數據建模與文檔設計

目錄 1. 文檔數據庫的概念 2. 數據建模的最佳實踐 3. 復雜文檔結構的設計 4. Java代碼實踐 1. 文檔數據庫的概念 MongoDB文檔模型&#xff1a; MongoDB是一種文檔數據庫&#xff0c;它以BSON&#xff08;Binary JSON&#xff09;格式存儲數據。文檔是MongoDB中基本的數據單…

#HarmonyOS:基礎語法

基礎語法 定義了聲明式UI描述&#xff1b; 自定義組件&#xff1b; 動態擴展UI元素的能力&#xff1b; 狀態管理 多維度裝填管理機制&#xff1b;父子組件間爺孫組件間全局范圍內傳遞跨設備傳遞只讀的單向傳遞可變的雙向傳遞 渲染控制 UI描述&#xff1a;以聲明式的方式來…

鴻蒙方舟開發框架ArkUI簡介

語雀知識庫地址&#xff1a;語雀HarmonyOS知識庫 飛書知識庫地址&#xff1a;飛書HarmonyOS知識庫 嗨&#xff0c;各位別來無恙吶&#xff0c;我是小白 眾所周知&#xff0c;華為在今年推出了 HarmonyOS 4.0 版本&#xff0c;而在此之前的版本中&#xff0c;HarmonyOS 應用的 …

2024年AI視頻識別技術的6大發展趨勢預測

隨著人工智能技術的快速發展&#xff0c;AI視頻識別技術也將會得到進一步的發展和應用。2023年已經進入尾聲&#xff0c;2024年即將來臨&#xff0c;那么AI視頻識別技術又將迎來怎樣的發展趨勢&#xff1f;本文將對2023年的AI視頻技術做一個簡單的盤點并對2024年的發展趨勢進行…

Advanced Renamer

Advanced Renamer 安裝鏈接 1.前后添加字符 2.字符轉數字&#xff0c;編號整體加減

oracle實驗2023-12-8--觸發器

第十四周實驗 【例】功能要求&#xff1a;增加一新表XS_1&#xff0c;表結構和表XS相同&#xff0c;用來存放從XS表中刪除的記錄。 分析: 1、創建表 xs_1 SQL> create table xs_1 as select * from xs; Table created SQL> truncate table xs_1; Table truncated題目&a…

StoneDB-8.0-V2.2.0 企業版正式發布!性能優化,穩定性提升,持續公測中!

? 11月&#xff0c;StoneDB 新版本如期而至&#xff0c;這一個月來我們的研發同學加班加點&#xff0c;持續迭代&#xff1a;在 2.2.0 版本中&#xff0c;我們針對用戶提出的需求和做出了重量級更新&#xff0c;修復了一些已知和用戶反饋的 Bug&#xff0c;同時對部分代碼進行…

PairLIE論文閱讀筆記

PairLIE論文閱讀筆記 論文為2023CVPR的Learning a Simple Low-light Image Enhancer from Paired Low-light Instances.論文鏈接如下&#xff1a; openaccess.thecvf.com/content/CVPR2023/papers/Fu_Learning_a_Simple_Low-Light_Image_Enhancer_From_Paired_Low-Light_Instan…

Kafka安全性探究:構建可信賴的分布式消息系統

在本文中&#xff0c;將研究Kafka的安全性&#xff0c;探討如何確保數據在傳輸和存儲過程中的完整性、機密性以及授權訪問。通過詳實的示例代碼&#xff0c;全面討論Kafka安全性的各個方面&#xff0c;從加密通信到訪問控制&#xff0c;幫助大家構建一個可信賴的分布式消息系統…

vue3 setup router的使用教程

vue3 setup router的使用教程 文章目錄 vue3 setup router的使用教程1. 安裝2. 使用&#xff08;創建路由實例&#xff09;3. 路由跳轉3.1 通過router-link標簽跳轉3.2 通過js代碼跳轉 4. 接收參數4.1 通過query接收參數4.2 通過params接收參數 5. 路由守衛5.1 全局守衛5.2 路由…

阿里云docker加速

文章目錄 一、 阿里云鏡像倉庫配置二、配置加速1. CentOS2. Mac3. Windows注意 一、 阿里云鏡像倉庫配置 1.注冊阿里云賬號&#xff0c;并登陸到阿里云后臺&#xff0c;進入控制臺面板 2.進入控制臺以后&#xff0c;找到左上方的三橫的功能列表按鈕&#xff0c;在彈出來的功能…

智能手機IC

智能手機IC 電子元器件百科 文章目錄 智能手機IC前言一、智能手機IC是什么二、智能手機IC的類別三、智能手機IC應用實例四、智能手機IC作用總結前言 智能手機IC通過相互配合和協同工作,支持智能手機的各種功能和特性,如高速計算、多媒體處理、無線通信、圖形渲染、傳感器數據…

G1 GC基本邏輯

1 MixedGC基本過程 在G1GC中&#xff0c;有兩種主要的垃圾回收過程&#xff1a;Young GC和Mixed GC。這兩者都是為了回收堆內存中的垃圾對象&#xff0c;但是他們關注的區域和工作方式有所不同。 Young GC&#xff1a; Young GC主要負責回收Young Generation&#xff08;包括…