裝飾器模式(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ì)待,更加靈活
核心代碼
注意事項(xiàng)
- 盡量保持裝飾類與被裝飾類的接口相同,確保在客戶端調(diào)用時(shí)能夠被一致對(duì)待
- 被裝飾類盡量是一個(gè)“輕”類,較少的職能,通過裝飾類對(duì)其進(jìn)行擴(kuò)展
- 如果具體構(gòu)件類只有一個(gè),那么抽象裝飾類可以直接是具體構(gòu)件類的子類
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
相關(guān)推薦
Python 是一種對(duì)新手很友好的語(yǔ)言。但是,它也有很多較難掌握的高級(jí)功能,比如裝飾器(decorator)。很多初學(xué)者一直不理解裝飾器及其工作原理,在這篇文章中,我們將介紹
發(fā)表于 10-08 11:39
?2185次閱讀
可讀性。 在本教程中,我們將介紹SeaORM的基本用法和進(jìn)階用法。我們將使用SQLite數(shù)據(jù)庫(kù)來演示這些用法。 基礎(chǔ)用法 在使用SeaORM
發(fā)表于 09-19 14:37
?2147次閱讀
,包括Hash trait、HashMap、HashSet等,本教程將詳細(xì)介紹Rust語(yǔ)言Hash特征的基礎(chǔ)用法和進(jìn)階用法。 基礎(chǔ)用法 使用Hash trait 在Rust語(yǔ)言中,Hash trait
發(fā)表于 09-19 16:02
?1315次閱讀
定時(shí)器是單片機(jī)里非常重要的一個(gè)模塊,必須熟練掌握,本篇按這樣的順序展開:一、簡(jiǎn)單介紹定時(shí)器二、定時(shí)器基本用法三、定時(shí)器高級(jí)使用技巧(linu
發(fā)表于 07-16 09:01
引入了@BuilderParam裝飾器,@BuilderParam用來裝飾指向@Builder方法的變量,開發(fā)者可在初始化自定義組件時(shí)對(duì)此屬性進(jìn)行賦值,為自定義組件增加特定的功能。該裝飾
發(fā)表于 09-27 16:02
適配器模式、裝飾器模式、代理模式都屬于設(shè)計(jì)模式中的結(jié)構(gòu)型模式
發(fā)表于 10-18 15:53
?1.7w次閱讀
裝飾模式指的是在不必改變?cè)愇募褪褂美^承的情況下,動(dòng)態(tài)地?cái)U(kuò)展一個(gè)對(duì)象的功能。它是通過創(chuàng)建一個(gè)包裝對(duì)象,也就是裝飾來包裹真實(shí)的對(duì)象。在計(jì)算機(jī)編程中,適配器模式(有時(shí)候也稱包裝樣式或者包
發(fā)表于 01-15 10:31
?6942次閱讀
Python中的裝飾器用于擴(kuò)展可調(diào)用對(duì)象的功能,而無需修改其結(jié)構(gòu)。基本上,裝飾器函數(shù)包裝另一個(gè)函數(shù)以增強(qiáng)或修改其行為。我們可以通過一個(gè)具體的例子了解基礎(chǔ)知識(shí)!讓我們編寫一個(gè)包含裝飾
發(fā)表于 07-01 11:35
?2182次閱讀
的源碼,就會(huì)發(fā)現(xiàn) middleware 功能的實(shí)現(xiàn)用的就是裝飾者模式(Decorator Pattern)。
發(fā)表于 06-29 10:22
?753次閱讀
裝飾器模式(Decorator Pattern),是結(jié)構(gòu)型設(shè)計(jì)模式的一種,裝飾器
發(fā)表于 03-01 10:55
?377次閱讀
定義 首先我們先來了解下裝飾器的定義。顧名思義,在Python中,裝飾器本質(zhì)上就是一個(gè)函數(shù),它可以接收一個(gè)函數(shù)作為參數(shù),然后返回一個(gè)新的函數(shù)。這個(gè)新的函數(shù)可以在執(zhí)行原有函數(shù)之前或之后,
發(fā)表于 06-21 16:54
?704次閱讀
什么是裝飾器模式 裝飾器模式(Decorator Pattern): 在不改變對(duì)象自身的基礎(chǔ)上,
發(fā)表于 10-08 14:25
?3181次閱讀
在寫代碼的時(shí)候,往往會(huì)漏掉日志這個(gè)關(guān)鍵因素,導(dǎo)致功能在使用的時(shí)候出錯(cuò)卻無法溯源。 其實(shí),只需要寫一個(gè)非常簡(jiǎn)單的日志裝飾器,我們就能大大提升排查問題的效率。 1.簡(jiǎn)陋版裝飾器 寫一個(gè)
發(fā)表于 10-21 14:39
?664次閱讀
在寫代碼的時(shí)候,往往會(huì)漏掉日志這個(gè)關(guān)鍵因素,導(dǎo)致功能在使用的時(shí)候出錯(cuò)卻無法溯源。 其實(shí),只需要寫一個(gè)非常簡(jiǎn)單的日志裝飾器,我們就能大大提升排查問題的效率。 1.簡(jiǎn)陋版裝飾器 寫一個(gè)
發(fā)表于 10-31 15:05
?455次閱讀
今天介紹的是一個(gè)已經(jīng)存在十三年,但是依舊不紅的庫(kù) decorator,好像很少有人知道他的存在一樣。 這個(gè)庫(kù)可以幫你做什么呢 ? 其實(shí)很簡(jiǎn)單,就是可以幫你更方便地寫python裝飾器代碼,更重
發(fā)表于 11-01 09:54
?446次閱讀
評(píng)論