裝飾器設計模式(Decorator Pattern)詳解

裝飾器設計模式(Decorator Pattern)詳解

裝飾器模式是一種結構型設計模式,它允許動態地向對象添加額外行為,而無需修改其原始類。這種模式通過包裝對象的方式提供靈活的擴展功能替代繼承。


1. 核心概念

(1)模式定義

裝飾器模式:動態地給一個對象添加一些額外的職責,就增加功能來說,裝飾器模式比生成子類更為靈活。

(2)適用場景

  • 需要動態擴展對象功能,但不想修改原有代碼
  • 需要組合多種功能,避免使用多層繼承
  • 系統需要在運行時選擇不同行為

注意:

  • 在裝飾器設計模式中有兩個重要的角色:裝飾者,被裝飾者
  • 裝飾器設計模式當中要求:裝飾者 與 被裝飾者 應實現同一個接口/同一些接口,繼承同一個抽象類
  • 為什么裝飾者 與 被裝飾者 要實現同一個接口?
    因為實現了同一個接口后,對于客戶端程序來說,使用 裝飾者 ()的時候就像在使用 被裝飾者 一樣
  • 裝飾者 含有被裝飾者 的引用(A has a B.盡量使用has a,這樣的耦合度低,不要使用is a)

2. UML類圖

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

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

相關文章

【SpringMVC】詳解參數傳遞與實戰指南

目錄 1.前言 2.正文 2.1基礎參數傳遞 2.1.1單參數 2.1.2多參數 2.2對象參數綁定 2.2.1自動封裝對象 2.2.2參數別名處理 2.3集合類型處理 2.3.1數組接收 2.3.2List集合接收 2.4JSON參數處理 2.4.1介紹JSON 2.4.2傳遞JSON參數 2.5RESTful風格參數 2.6文件上傳處理…

mysql-窗口函數一

目錄 一、感受一下分組與窗口函數的區別 二、滑動窗口(子窗口)大小的確認 2.1 分組函數下order by使用 2.2 窗口子句 2.3 執行流程 三、函數使用 窗口函數需要mysql的版本大于等于8才行,可以先檢查一下自己的mysql版本是多少 select ve…

解決在Mac上無法使用“ll”命令

在 macOS 上,ll 命令是一個常見的別名,它通常是指向 ls -l 的。但是,如果你看到 zsh: command not found: ll,這意味著你當前的 zsh 配置中沒有設置 ll 作為別名。 解決方法: 1. 使用 ls -l 命令 如果只是想查看目錄…

GTA5(傳承/增強) 13980+真車 超跑 大型載具MOD整合包+最新GTA6大型地圖MOD 5月最新更新

1500超跑載具 1000普通超跑 1500真車超跑 各種軍載具1000 各種普通跑車 船舶 飛機 1000 人物1500 添加式led載具1000 超級英雄最新版 添加添加式武器MOD1000 添加地圖MOD500 添加超跑載具2000 當前共計1.2wMOD 4月2日更新 新增770menyoo地圖 當前共計12770 新增48款超級英雄最新…

初學Vue之記事本案例

初學Vue之記事本案例 案例功能需求相關Vue知識案例實現1.實現方法及代碼2.演示 案例收獲與總結 案例功能需求 基于Vue實現記事功能(不通過原生JS實現) 1.點擊保存按鈕將文本框的內容顯示在特定位置,且清空文本框內容 2.點擊清空按鈕&#x…

一個linux系統電腦,一個windows電腦,怎么實現某一個文件夾共享

下載Samba linux主機名字不能超過15個字符 sudo dnf install samba samba-client -y 創建共享文件夾 sudo mkdir /shared 配置文件 vim /etc/samba/smb.conf [shared] path /shared available yes valid users linux電腦用戶 read only no browsable yes p…

樹莓派5+edge-tts 語音合成并進行播放測試

簡介 Edge-TTS 是一個基于微軟 Edge 瀏覽器的開源文本轉語音(TTS)工具,主要用于將文本轉換為自然流暢的語音。它利用了微軟 Azure 的 TTS 技術,支持多種語言和聲音,同時具備高質量的語音合成能力。這里簡單演示在樹莓派中安裝該項目進行簡單測試。 開源倉庫地址:https:/…

多模態革命!拆解夸克AI相機技術架構:如何用視覺搜索重構信息交互?(附開源方案對比)

一、技術人必看:視覺搜索背后的多模態架構設計 夸克「拍照問夸克」功能絕非簡單的OCRQA拼接,而是一套多模態感知-推理-生成全鏈路系統,其技術棧值得開發者深挖: 視覺編碼器:基于Swin Transformer V2,支持4…

論文閱讀:2024 ICLR Workshop. A STRONGREJECT for Empty Jailbreaks

總目錄 大模型安全相關研究:https://blog.csdn.net/WhiffeYF/article/details/142132328 A STRONGREJECT for Empty Jailbreaks 對空越獄的 StrongREJECT https://arxiv.org/pdf/2402.10260 https://github.com/dsbowen/strong_reject https://strong-reject.re…

AI生成Flutter UI代碼實踐(一)

之前的雜談中有提到目前的一些主流AI編程工具,比如Cursor,Copilot,Trea等。因為我是Android 開發,日常使用Android Studio,所以日常使用最多的還是Copilot,畢竟Github月月送我會員,白嫖還是挺香…

計網分層體系結構(包括OSI,IP,兩者對比和相關概念)

眾所周知,就像我們計算機領域中的任何東西一樣,計算機網絡也是個分層的體系結構,現代提出的結構就兩種——OSI和TCP/IP,我們先來剖析并對比一下這兩種模型,然后總結一下分層思想中的一些共性。 TCP/IP與OSI結構對比圖 …

面向對象的XML綜合練習

快遞包裹配送管理 需求描述 構建一個快遞包裹配送管理系統,完成以下操作: 記錄每個快遞包裹的信息,包括包裹編號、收件人姓名、收件地址和是否已配送。可以添加新的快遞包裹到系統中。標記某個包裹為已配送狀態。統計所有已配送和未配送的…

什么是鴻蒙南向開發?什么是北向開發?

文章目錄 鴻蒙南向開發 vs 北向開發:底層與生態的雙向賦能一、鴻蒙南向開發:連接硬件的底層基石二、鴻蒙北向開發:構建全場景應用生態三、南向與北向:互補與協同四、如何選擇開發方向?結語 鴻蒙南向開發 vs 北向開發:…

Linux常用命令27——userdel刪除用戶

在使用Linux或macOS日常開發中,熟悉一些基本的命令有助于提高工作效率,userdel命令來自英文詞組user delete的縮寫,其功能是刪除用戶信息。在Linux系統中,一切都是文件,用戶信息被保存到了/etc/passwd、/etc/shadow以及…

[藍橋杯 2021 省 AB] 砝碼稱重 Java

import java.util.*;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();int[] w new int[n 1];int sum 0; // 所有砝碼重量之和for (int i 1; i < n; i) {w[i] sc.nextInt();sum w[i];}sc.close()…

今天的python練習題

目錄 一、每日一言 二、練習題 三、效果展示 四、下次題目 五、總結 一、每日一言 晚上8點到的&#xff0c;還是會被感動到&#xff0c;有一位列車員同志在檢票期間&#xff0c;叫我到列車員專座位上去坐&#xff0c;我很感激他&#xff0c;溫暖人心&#xff0c;所以人間填我…

20250430在ubuntu14.04.6系統上查看系統實時網速

rootrootubuntu:~$ sudo apt-get install iftop 【不需要root權限】 rootrootubuntu:~$ sudo apt-get install nload rootrootubuntu:~$ sudo apt-get install vnstat 【失敗】 rootrootubuntu:~$ sudo apt-get install speedtest-cli rootrootubuntu:~$ sudo apt-get install …

字節一面:后端開發

前言 這是我字節一面的回憶錄&#xff0c;可能有些不全。 由于博主是Java面試Go崗&#xff0c;操作系統和計網問的還是比較多。 個人感覺字節很喜歡追問&#xff0c;博主被追問拷打的找不到北了&#xff0c;總結還是學的太淺了。 面試官給我的建議&#xff1a;再更深挖一些…

快速掌握大語言模型+向量數據庫_RAG實現

一、前言 結合前面掌握的vLLM部署Qwen7B模型、通過Embedding模型&#xff08;bdg-large-zh模型&#xff09;提取高質量作文內容并預先存儲到Milvus向量數據庫中&#xff0c;我們很容易實現RAG方案進一步提高寫作內容的生成質量。 本篇要實現的目標是&#xff1a;通過FlaskAPI…