設計模式-代理模式、裝飾者模式

代理模式

Proxy(代理)—對象結構型模式定義:給某一個對象提供一個代理對象,并由代理對象控制原有對象的引用。
代理模式的核心思想是:創建一個代理對象,代理對象在調用目標方法時,可以插入額外的邏輯。
?


注意區分裝飾者模式和代理模式的區別。在代理模式中,ComponentImpl 和 Proxy 類都實現了 IComponent 接口,Proxy 對象中雖然也維護著一個 ComponentImpl 對象,但一般情況下它是代理類自己初始化的,不像裝飾者模式是通過 set 進去的,同時在接口方法即 operation() 中代理對象會限制外界對被代理對象的訪問,而裝飾者模式是裝飾者給被裝飾者添加額外的行為。
Spring AOP底層,就是動態代理模式的實現。
?


適用場景分析:
1.需要修改或屏蔽某一個或若干個類的部分功能,復用另外一部分功能。
2.需要攔截一批類中的某些方法,在方法的前后插入一些一致的操作,如Spring的AOP。

裝飾者模式

Decorator(裝飾)—對象結構型模式定義:動態地給一個對象添加一些額外的功能。就增加功能來說,裝飾模式相比生成子類更為靈活。

ComponentImpl 和 Decorator 類都實現了 IComponent 接口,不同的是 ComponentImpl 提供了具體實現,而 Decorator 是先聚合 ComponentImpl 接著在自己的實現方法即 operation() 方法中做些處理(即裝飾)后再調用 ComponentImpl 對象的具體實現。

io中inputStream在裝飾模式的用法 BufferedInputStream

設計原則:

? 遵循迪米特(最少知識原則)

? 單一職責

? 開閉原則

? 破壞里氏替換原則

場景分析:

1.需要動態地給一個對象增加功能,這些功能可以動態地撤銷。

2.IO流包裝、數據源包裝。

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

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

相關文章

國產安路FPGA純verilog視頻圖像去霧,基于暗通道先驗算法實現,提供5套TD工程源碼和技術支持

目錄 1、前言工程概述免責聲明 2、相關方案推薦我已有的所有工程源碼總目錄----方便你快速找到自己喜歡的項目國產安路FPGA相關方案推薦本博主已有的圖像處理方案 3、設計思路框架工程設計原理框圖輸入Sensor之-->GC0308攝像頭輸入Sensor之-->OV7725攝像頭輸入Sensor之--…

Windows商店中的簡筆畫學習應用

此應用包含動物、植物、人物、交通工具、卡通等類別超過1500張線條圖片,支持圖片臨摹和圖片填色,可以將繪圖和填色結果保存成文件,也可以打開本地圖片進行臨摹和填色。 菜單說明 右側繪圖區上方菜單功能包括:打開文件&#xff1…

樹莓派4B --ubundu20.04 機載電腦配置WIFI熱點

不要用刷機過程配置WIFI賬號,因為在那里配置的WIFI都是不受控的,會出很多問題。 1.安裝網絡 sudo apt-get install network-manager 2.將源碼CLONE到本地 sudo git clone https://github.com/oblique/create_ap cd create_ap sudo make install 當你…

??JETSON NANO B01? 在AIOT 的領域的作用

低功耗邊緣設備的理想選擇 👉 ??適合人群??:精打細算、小廠搞智能監控的 ??Jetson Nano B01??(4GB內存/0.47TOPS算力),JetBot (NVIDIA社區版) 機器人/自動駕駛項目? ??硬件??:Jetson Nano B0…

Kioptrix Level2

靶機截圖 收集信息 主機發現 打開靶機后,用kali探測靶機的 IP arp-scan-l 可以用nmap進行同網段掃描探測存活ip nmap -sP 10.4.7.0/24 端口掃描 命令過程 nmap -sT -sV -p- -O 10.4.7.220 -sT:TCP連接掃描 -sV:服務版本探測 -p-&#x…

Word之電子章制作——1

第一步:在插入 ——形狀哪里選擇一個圓形,并且下一步按住shift鍵拉出一個正圓形。 第二步:鼠標右鍵去掉背景顏色,邊框粗細設置成3磅。 第三步:在插入導航窗找到藝術字,點擊大寫的A,輸入公司名字…

LeetCode 2799.統計完全子數組的數目

給你一個由 正 整數組成的數組 nums 。 如果數組中的某個子數組滿足下述條件,則稱之為 完全子數組 : 子數組中 不同 元素的數目等于整個數組不同元素的數目。 返回數組中 完全子數組 的數目。 子數組 是數組中的一個連續非空序列。 示例 1&#xff1…

33.表復制和去重

1.表結構的復制(LIKE) 當我們想復制一個表的時候,首先需要創建一個與被復制表相同結構的表。這時候就要用到關鍵字like: 語法使用: create table table_name LIKE temp_table 示例:復制一個和表emp(老朋友了&#…

GitLab 18.1 正式發布Maven 虛擬倉庫、密碼泄露檢測等功能,可升級體驗!

GitLab 是一個全球知名的一體化 DevOps 平臺,很多人都通過私有化部署 GitLab 來進行源代碼托管。極狐GitLab 是 GitLab 在中國的發行版,專門為中國程序員服務。可以一鍵式部署極狐GitLab。 學習極狐GitLab 的相關資料: 極狐GitLab 官網極狐…

藍牙網絡拓撲面試通關:微微網與散射網原理 + 真題解析

為什么面試官總愛問藍牙拓撲? 你可能有過這樣的經歷:面試嵌入式 / 物聯網 / 無線通信崗位時,面試官突然問:“藍牙的微微網和散射網有什么區別?” 別慌!這不是在考你背定義,而是考察你對無線通信核心邏輯的理解 ——如何用有限資源實現高效組網。 藍牙作為短距離無線通信…

[Python]-基礎篇1- 從零開始的Python入門指南

無論你是尚未接觸編程的新手,還是想從其他語言轉向Python的開發者,這篇文章都是你的入門課。 一、Python是什么? Python是一種解釋型、高級、通用型編程語言,以簡潔明了、簡單易用著稱。它可以應用于網站開發、自動化腳本、數據分析、人工智能、系統操作等多種場景。 二、…

Objective-C面向對象編程:類、對象、方法詳解(保姆級教程)

目錄 一、核心概念 二、類的定義(分.h和.m文件) 1. 頭文件(.h)—— 公開聲明 2. 實現文件(.m)—— 具體實現 3. 屬性特性解析 原子性 所有權語義(ARC環境下) 讀寫控制 三、對象創建與內存管理 1…

CentOS 7 編譯ClickHouse 24.8完整指南

前言 在CentOS 7上編譯ClickHouse 24.8可能會遇到一些挑戰,主要是因為CentOS 7的默認軟件版本較舊。本文將詳細介紹從零開始構建ClickHouse 24.8的完整過程,包括依賴安裝和環境配置。 準備工作 首先確保系統已更新到最新版本: yum update…

Protocol Buffers (Protobuf) 全面解析

一、核心概念解析 1. 什么是數據序列化? #mermaid-svg-HZKw9iRlpQIRFiO3 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-HZKw9iRlpQIRFiO3 .error-icon{fill:#552222;}#mermaid-svg-HZKw9iRlpQIRFiO3 .…

高斯混合模型GMMK均值(十三-1)——K均值是高斯混合模型的特例

EM算法與K均值算法的關系 K均值可以看成是高斯混合模型的特例。 對K均值算法與EM算法進行比較后,可以發現它們之間有很大的相似性。K均值算法將數據點硬(hard)分配到聚類中,每個數據點唯一地與一個聚類相關聯,而EM算法…

StarRocks 向量索引如何讓大模型“記性更好”?

隨著 ChatGPT、DeepSeek 等大語言模型的普及,我們已經能夠與 AI 進行流暢的對話。然而,即使是最先進的大模型也面臨著“記憶困境”,具體表現模型只能記住訓練時接觸的知識,且這些知識在使用時很可能會過期。實際應用或在處理特定領…

UniApp Vue3 模式下實現頁面跳轉的全面指南

1. 引言 1.1 UniApp 與 Vue3 的結合優勢 UniApp 是一個使用 Vue.js 開發所有前端應用的框架,支持編譯到 iOS、Android、H5、以及各種小程序平臺。Vue3 提供了更高效的響應式系統和 Composition API,使開發體驗更加現代化和靈活。 1.2 頁面跳轉在應用開發中的重要性 頁面跳…

Solidity學習 - ABI 應用二進制接口

文章目錄 一、ABI 基礎概念1. ABI 與 API 的區別2. ABI 的核心作用 二、ABI 接口描述1. 編譯后的產物2. ABI JSON 格式示例3. ABI JSON 關鍵字段說明 三、ABI 編碼1. 編碼示例2. 編碼數據的組成3. Solidity 中的編碼函數 四、ABI 解碼1. 解碼的基本概念2. 事件日志的解碼 五、A…

星際爭霸數據集指南

星際爭霸作為檢驗AI效果的一個重要“模式生物”, 是驗證AI技術的重要平臺?,尤其在 深度學習 和 強化學習領域。該游戲因其復雜的游戲機制和實時決策要求,為AI研究提供了豐富的測試環境和挑戰。 本博文是記錄自己曾經研究星際爭霸AI時對于數據部分的一點…

VUE組件與組件之間的傳參

每次啟動vue2項目的時候在 vue.config.js中配置: const { defineConfig } require(vue/cli-service) module.exports defineConfig({transpileDependencies: true,//關閉語法嚴格檢驗lintOnSave:false})1:在 src 下 創建 utils 文件夾 然后創建 Bas…