設計模式簡述(十一)裝飾器模式

裝飾器模式

  • 描述
  • 基本使用
  • 使用

描述

裝飾器模式是一種功能型模式
用于動態增強對象的功能
這么一說感覺上和代理模式有些類似

抽象裝飾器 要實現原有業務接口,并注入原有業務對象
至于對原有業務對象的調用,可以采用private業務對象 + 實現業務接口方法的形式 或者 protected + 具體裝飾類調用原有對象方法

但是裝飾器在有些點上可能違反里氏替換原則,特別是裝飾器存在重載的時候要注意

基本使用

  • 定義一個抽象業務接口(這是實現裝飾器模式的基礎)
public interface IService {void biz();
}
  • 原有業務實現類
public class DefaultService implements IService {@Overridepublic void biz() {System.out.println("DefaultService....");}
}
  • 裝飾器抽象(通常是抽象類,持有原有對象的引用
public abstract class AbstractWrapper implements IService {private IService service;public AbstractWrapper(IService service) {this.service = service;}@Overridepublic void biz() {service.biz();}
}
  • 具體裝飾器
public class WrapperA extends AbstractWrapper {public WrapperA(IService service) {super(service);}@Overridepublic void biz() {super.biz();this.wrapperA();}private void wrapperA() {System.out.println("WrapperA 增強方法");}
}public class WrapperB extends AbstractWrapper {public WrapperB(IService service) {super(service);}@Overridepublic void biz() {super.biz();this.wrapperA();}private void wrapperA() {System.out.println("WrapperB 增強方法");}
}

使用

public class Sample {public static void main(String[] args) {IService service = new DefaultService();service.biz();System.out.println("===== 使用裝飾器 ===");IService wrapper = new WrapperA(new WrapperB(service));wrapper.biz();}
}

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

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

相關文章

【NetCore】ControllerBase:ASP.NET Core 中的基石類

ControllerBase:ASP.NET Core 中的基石類 一、什么是 ControllerBase?二、ControllerBase 的主要功能三、ControllerBase 的常用屬性四、ControllerBase 的常用方法2. 模型綁定與驗證3. 依賴注入五、ControllerBase 與 Controller 的區別六、實際開發中的最佳實踐七、總結在 …

DE2-115分秒計數器

一、模塊設計 如若不清楚怎么模塊化,請看https://blog.csdn.net/szyugly/article/details/146379170?spm1001.2014.3001.5501 1.1頂層模塊 module top_counter(input wire CLOCK_50, // 50MHz時鐘input wire KEY0, // 暫停/繼續按鍵out…

ubuntu git cola gui

直接的方法, samba, win 里用 tortoiseSVN 需要先在命令行,運行 git 命令,看到操作提示, 按照提示做 然后右鍵看 git diff 其它的方法 linux下可視化git工具git-cola安裝與使用(HTTP方式)_git…

每日一題(小白)回溯篇4

深度優先搜索題:找到最長的路徑,計算這樣的路徑有多少條(使用回溯) 分析題意可以得知,每次向前后左右走一步,直至走完16步就算一條走通路徑。要求條件是不能超出4*4的范圍,不能重復之前的路徑。…

【數據分享】2000—2020年我國250m精度灌溉農田柵格數據(免費獲取)

灌溉農田是指通過水利灌溉為農作物提供必要水分,以維持其生長需求的農田類型。灌溉農田占全球農田的20%,占全球糧食產量的40%。但其消耗了60%-70%的淡水和80%-90%的消耗性用水量。中國是世界上灌溉面積最大的農業大國,但中國僅占世界上8%的農…

MySQL-SQL-DML語句、INSER添加數據、UPDATE更新數據、DELETE刪除數據

一. DML 1. DML的英文全稱是Data Manipulation Language(數據操作語言),用來對數據庫中表的數據記錄進行增、刪、改操作。 2. 添加數據(INSERT);修改數據(UPDATE);刪除數據(DELETE) 二. DML-INSER添加數據 -- DML insert -- 指定字段添加數…

使用SymPy求解矩陣微分方程

引言 在數學、物理、工程等領域,微分方程常常被用來描述系統的變化和動態過程。對于多變量系統或者多方程系統,矩陣微分方程是非常常見的,它可以用來描述如電路、控制系統、振動系統等復雜的動態行為。今天,我們將通過Python 中的 SymPy 庫來求解矩陣微分方程,幫助大家輕…

Sentinel實戰(五)、系統保護規則、限流后統一處理及sentinel持久化配置

Spring Cloud Alibaba-Sentinel實戰(五)、系統保護規則、限流后統一處理及sentinel持久化配置 一、系統保護規則一)、系統規則支持的模式二)、新增系統規則界面三)、demo測試二、限流后統一處理實操demo三、sentinel持久化配一、系統保護規則 系統保護規則是從應用級別的…

【百日精通JAVA | SQL篇 | 第四篇】約束

SQL這一塊沒什么難度,主要是一個熟練度,稍微上點難度的地方,其實在于查,比較復雜,涉及到很多問題。 指定列插入 使用指定列插入的時候,未被指定的列使用默認值進行存儲,默認值為空。 默認值設置…

http協議版本的區別 -- 2和3

目錄 http2和http3的區別 傳輸層協議 QUIC協議 介紹 連接建立與握手 建立安全連接的過程 RTT 建連為什么需要兩個過程 原因 解決 QUIC協議的1-RTT 建連 必要性 連接過程 第一次握手(Client Hello) 版本號 key_share 其他 第二次握手 介紹 Server Hello 身…

21 天 Python 計劃:MySQL 庫相關操作

文章目錄 前言一、系統數據庫1. information_schema2. performance_schema3. mysql4. test 二、創建數據庫1. 語法2. 數據庫命名規則 三、數據庫相關操作1. 查看數據庫2. 選擇數據庫3. 刪除數據庫4. 修改數據庫 總結 前言 Python是一種強大且易于學習的編程語言。通過這個21天的…

手撕LLM(二):從源碼出發,探索LoRA加載、推理全流程

接上回接著說,前面我們通過分析源碼,了解了大模型推理的詳細流程,包括提示詞從輸入,到對話模版包裝,到tokenID轉換,到Embedding詞向量轉換;通過大模型推理,再將大模型輸出進行最后一…

WPS宏開發手冊——常見問題

目錄 系列文章6、常見問題 系列文章 使用、工程、模塊介紹 JSA語法 JSA語法練習題 Excel常用Api Excel實戰 常見問題 附錄 6、常見問題 6.1、編輯完宏后會自動保存,下次打開文件會提醒是否啟用宏,點擊啟用會自動加載上次編輯的…

【Android安卓移動計算】實現項目一[模擬器啟動項目]

文章目錄 新建項目項目結構介紹說明程序自動生成:圖片和樣式文件夾:Training1\app\src\main\res\drawable布局文件文件夾:Training1\app\src\main\res\layoutJava文件夾:Training1\app\src\main\java\com\example\training1Androi…

快 速 冪

暴力肯定會超時 3^10 9^5 9*9^4 9*81^2 9*18^2^1 先對b判斷奇偶 偶數:對b/2,對a平方 奇數:先*a,再對a平方,b/2 取余注意:(3^10)%k( 9 * 18^2^1)%k(( 9%k )%k * (18^2^1)%k)%k

網絡釣魚攻擊的威脅和執法部門的作用(第二部分)

執法部門在打擊網絡釣魚中的作用 雖然網絡釣魚可能始于一封欺騙性的電子郵件或短信,但其后果可能遠遠超出個人收件箱的范圍,影響企業、經濟甚至國家安全。隨著網絡釣魚攻擊的規模和復雜性不斷增加,執法機構站在前線,努力預防、調…

Data_Socket和UDP_Socket

Data_Socket 和 UDP_Socket 是兩種不同類型的網絡套接字,它們用于不同的協議和應用場景。以下是它們的主要區別: 協議類型: UDP_Socket:使用的是 UDP(User Datagram Protocol) 協議,這是一種無連…

2025高頻面試算法總結篇【排序】

文章目錄 直接刷題鏈接直達把數組排成最小的數刪除有序數組中的重復項求兩個排序數組的中位數求一個循環遞增數組的最小值數組中的逆序對如何找到一個無序數組的中位數鏈表排序從一大段文本中找出TOP K 的高頻詞匯 直接刷題鏈接直達 把一個數組排成最大的數 劍指 Offer 45. 把…

模型壓縮技術從零到一

模型壓縮是深度學習中的重要技術,旨在減小模型尺寸和計算需求,特別適合在移動設備或嵌入式系統上部署。 要點 模型壓縮技術可以顯著減小模型尺寸和計算需求,適合資源受限設備。主要技術包括剪枝、量化、知識蒸餾、低秩分解和輕量級模型設計…

浮點數精度問題

目錄 ieee754標準解決方法 和c語言一樣,所有以ieee754標準的語言都有浮點數精度問題,js也有浮點數精度問題,并且因為是弱類型語言這個問題更嚴重,js的Number類型的數據都被視為浮點數 ieee754標準 js的數字類型就相當于c語言doub…