裝飾器模式(Decorator Pattern)允許向一個(gè)現(xiàn)有的對(duì)象添加新的功能,同時(shí)又不改變其結(jié)構(gòu)。這種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式,它是作為現(xiàn)有的類的一個(gè)包裝。
這種模式創(chuàng)建了一個(gè)裝飾類,用來包裝原有的類,并在保持類方法簽名完整性的前提下,提供了額外的功能。
我們通過下面的實(shí)例來演示裝飾器模式的用法。其中,我們將把一個(gè)形狀裝飾上不同的顏色,同時(shí)又不改變形狀類。
結(jié)構(gòu)圖
角色與理解
- 裝飾模式共分為四種角色:
- Component (抽象構(gòu)件):具體構(gòu)件與抽象裝飾類的共同父類,聲明具體構(gòu)件中實(shí)現(xiàn)的業(yè)務(wù)方法,它的出現(xiàn)能夠讓客戶端一致的透明的對(duì)待裝飾前和裝飾后的類
- ConcreteComponent (具體構(gòu)件):抽象構(gòu)件的子類,實(shí)現(xiàn)具體的業(yè)務(wù)方法
- Decorator (抽象裝飾類):抽象構(gòu)件的子類,內(nèi)部維持一個(gè)抽象構(gòu)件的引用,通過該引用調(diào)用具體構(gòu)件的業(yè)務(wù)方法
- ConcreteDecorator (具體裝飾類):抽象裝飾類的實(shí)現(xiàn)類,聲明并實(shí)現(xiàn)各種裝飾方法實(shí)現(xiàn)對(duì)具體構(gòu)件的裝飾
- 具體構(gòu)件和裝飾具體構(gòu)件的抽象裝飾類通過注入的方式被抽象裝飾類繼續(xù)裝飾
- 因?yàn)榫唧w構(gòu)件和抽象裝飾類都繼承抽象構(gòu)件,所以被裝飾時(shí)可以被同樣的對(duì)待,更加靈活
核心代碼
- 抽象組件
- 具體構(gòu)件
- 抽象裝飾類
- 具體裝飾類
- 客戶端
注意事項(xiàng)
- 盡量保持裝飾類與被裝飾類的接口相同,確保在客戶端調(diào)用時(shí)能夠被一致對(duì)待
- 被裝飾類盡量是一個(gè)“輕”類,較少的職能,通過裝飾類對(duì)其進(jìn)行擴(kuò)展
- 如果具體構(gòu)件類只有一個(gè),那么抽象裝飾類可以直接是具體構(gòu)件類的子類
-
pattern
+關(guān)注
關(guān)注
0文章
6瀏覽量
9766
發(fā)布評(píng)論請(qǐng)先 登錄
理解Python裝飾器及其工作原理
SeaORM的基礎(chǔ)用法
基于Rust語言Hash特征的基礎(chǔ)用法和進(jìn)階用法
定時(shí)器的基本用法是什么
OpenHarmony裝飾指定自定義組件:@BuilderParam裝飾器
適配器模式、裝飾器模式、代理模式的區(qū)別

適配器模式和裝飾模式的區(qū)別

Python:裝飾器的原理和案例
GoF給裝飾者模式的定義
嵌入式C語言軟件設(shè)計(jì)之裝飾器模式(Decorator Pattern)
在Python中裝飾器的使用
Python自制簡單實(shí)用的日志裝飾器

Python 自制簡單實(shí)用的日志裝飾器

如何寫一個(gè)簡單的裝飾器

評(píng)論