裝飾器模式(Decorator Pattern)允許向一個現有的對象添加新的功能,同時又不改變其結構。這種類型的設計模式屬于結構型模式,它是作為現有的類的一個包裝。
這種模式創建了一個裝飾類,用來包裝原有的類,并在保持類方法簽名完整性的前提下,提供了額外的功能。
我們通過下面的實例來演示裝飾器模式的用法。其中,我們將把一個形狀裝飾上不同的顏色,同時又不改變形狀類。
結構圖
角色與理解
- 裝飾模式共分為四種角色:
- Component (抽象構件):具體構件與抽象裝飾類的共同父類,聲明具體構件中實現的業務方法,它的出現能夠讓客戶端一致的透明的對待裝飾前和裝飾后的類
- ConcreteComponent (具體構件):抽象構件的子類,實現具體的業務方法
- Decorator (抽象裝飾類):抽象構件的子類,內部維持一個抽象構件的引用,通過該引用調用具體構件的業務方法
- ConcreteDecorator (具體裝飾類):抽象裝飾類的實現類,聲明并實現各種裝飾方法實現對具體構件的裝飾
- 具體構件和裝飾具體構件的抽象裝飾類通過注入的方式被抽象裝飾類繼續裝飾
- 因為具體構件和抽象裝飾類都繼承抽象構件,所以被裝飾時可以被同樣的對待,更加靈活
核心代碼
- 抽象組件
- 具體構件
- 抽象裝飾類
- 具體裝飾類
- 客戶端
注意事項
- 盡量保持裝飾類與被裝飾類的接口相同,確保在客戶端調用時能夠被一致對待
- 被裝飾類盡量是一個“輕”類,較少的職能,通過裝飾類對其進行擴展
- 如果具體構件類只有一個,那么抽象裝飾類可以直接是具體構件類的子類
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
pattern
+關注
關注
0文章
6瀏覽量
9651
發布評論請先 登錄
相關推薦
理解Python裝飾器及其工作原理
Python 是一種對新手很友好的語言。但是,它也有很多較難掌握的高級功能,比如裝飾器(decorator)。很多初學者一直不理解裝飾器及其工作原理,在這篇文章中,我們將介紹
發表于 10-08 11:39
?2247次閱讀
SeaORM的基礎用法
可讀性。 在本教程中,我們將介紹SeaORM的基本用法和進階用法。我們將使用SQLite數據庫來演示這些用法。 基礎用法 在使用SeaORM
基于Rust語言Hash特征的基礎用法和進階用法
,包括Hash trait、HashMap、HashSet等,本教程將詳細介紹Rust語言Hash特征的基礎用法和進階用法。 基礎用法 使用Hash trait 在Rust語言中,Hash trait
OpenHarmony裝飾指定自定義組件:@BuilderParam裝飾器
引入了@BuilderParam裝飾器,@BuilderParam用來裝飾指向@Builder方法的變量,開發者可在初始化自定義組件時對此屬性進行賦值,為自定義組件增加特定的功能。該裝飾
發表于 09-27 16:02
適配器模式和裝飾模式的區別
裝飾模式指的是在不必改變原類文件和使用繼承的情況下,動態地擴展一個對象的功能。它是通過創建一個包裝對象,也就是裝飾來包裹真實的對象。在計算機編程中,適配器模式(有時候也稱包裝樣式或者包
發表于 01-15 10:31
?7031次閱讀
![適配器<b class='flag-5'>模式</b>和<b class='flag-5'>裝飾</b><b class='flag-5'>模式</b>的區別](https://file1.elecfans.com//web2/M00/A7/29/wKgZomUMQruAXoqAAAAoz8CtRLE300.png)
Python:裝飾器的原理和案例
Python中的裝飾器用于擴展可調用對象的功能,而無需修改其結構。基本上,裝飾器函數包裝另一個函數以增強或修改其行為。我們可以通過一個具體的例子了解基礎知識!讓我們編寫一個包含裝飾
嵌入式C語言軟件設計之裝飾器模式(Decorator Pattern)
裝飾器模式(Decorator Pattern),是結構型設計模式的一種,裝飾器
發表于 03-01 10:55
?450次閱讀
在Python中裝飾器的使用
定義 首先我們先來了解下裝飾器的定義。顧名思義,在Python中,裝飾器本質上就是一個函數,它可以接收一個函數作為參數,然后返回一個新的函數。這個新的函數可以在執行原有函數之前或之后,
Python自制簡單實用的日志裝飾器
在寫代碼的時候,往往會漏掉日志這個關鍵因素,導致功能在使用的時候出錯卻無法溯源。 其實,只需要寫一個非常簡單的日志裝飾器,我們就能大大提升排查問題的效率。 1.簡陋版裝飾器 寫一個
![Python自制簡單實用的日志<b class='flag-5'>裝飾</b><b class='flag-5'>器</b>](https://file1.elecfans.com/web2/M00/A9/AF/wKgaomUzccmAOpWHAAHSmpKcgws791.jpg)
Python 自制簡單實用的日志裝飾器
在寫代碼的時候,往往會漏掉日志這個關鍵因素,導致功能在使用的時候出錯卻無法溯源。 其實,只需要寫一個非常簡單的日志裝飾器,我們就能大大提升排查問題的效率。 1.簡陋版裝飾器 寫一個
![Python 自制簡單實用的日志<b class='flag-5'>裝飾</b><b class='flag-5'>器</b>](https://file1.elecfans.com/web2/M00/A9/AF/wKgaomUzccmAOpWHAAHSmpKcgws791.jpg)
如何寫一個簡單的裝飾器
今天介紹的是一個已經存在十三年,但是依舊不紅的庫 decorator,好像很少有人知道他的存在一樣。 這個庫可以幫你做什么呢 ? 其實很簡單,就是可以幫你更方便地寫python裝飾器代碼,更重
![如何寫一個簡單的<b class='flag-5'>裝飾</b><b class='flag-5'>器</b>](https://file1.elecfans.com/web2/M00/AD/83/wKgZomVBr5iAQjrSAAKqQEyQzBY477.jpg)
評論