国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

12、【裝飾器模式】動態(tài)地為對象添加新功能

這篇具有很好參考價值的文章主要介紹了12、【裝飾器模式】動態(tài)地為對象添加新功能。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

你好,我是程序員雪球。

今天我們來聊聊 23 種設(shè)計模式中,一種常見的結(jié)構(gòu)型模式,裝飾器模式。聊聊它的設(shè)計思想、實(shí)現(xiàn)原理,應(yīng)用場景,以及如何使用。

?12、【裝飾器模式】動態(tài)地為對象添加新功能,業(yè)務(wù)邏輯,設(shè)計模式

?

裝飾器模式(Decorator Pattern)是一種結(jié)構(gòu)型設(shè)計模式,它允許在不改變原始類的基礎(chǔ)上,動態(tài)地為對象添加新的功能或行為。它通過創(chuàng)建一個包裝類來包裝原始類的實(shí)例,并在包裝類中提供新的功能。這種模式的核心思想是“組合優(yōu)于繼承”,因?yàn)樗试S在運(yùn)行時動態(tài)地選擇和組合不同的功能。

?

一、設(shè)計思想

裝飾器模式的設(shè)計思想是將功能的添加與類的繼承解耦。在傳統(tǒng)的面向?qū)ο缶幊讨?,如果需要為一個類添加新的功能,通常會使用繼承來擴(kuò)展類的功能。然而,繼承存在一些問題,例如代碼冗余、類的層次結(jié)構(gòu)復(fù)雜、靈活性較差等。裝飾器模式通過創(chuàng)建一個包裝類來包裝原始類的實(shí)例,并在包裝類中提供新的功能,從而避免了這些問題。

?

二、實(shí)現(xiàn)原理:

裝飾器模式的實(shí)現(xiàn)原理是通過創(chuàng)建一個抽象裝飾器類和具體裝飾器類來實(shí)現(xiàn)的。抽象裝飾器類定義了一個抽象方法,該方法接受一個原始類的實(shí)例作為參數(shù),并返回一個包裝類的實(shí)例。具體裝飾器類實(shí)現(xiàn)了抽象裝飾器類的抽象方法,并在包裝類中提供了新的功能。

?

三、應(yīng)用場景

裝飾器模式適用于需要在不改變原始類的基礎(chǔ)上,動態(tài)地為對象添加新的功能或行為的場景。例如:

?

1.?擴(kuò)展性:如果你的系統(tǒng)需要不斷地添加新的功能,而這些功能可能會影響到現(xiàn)有類的結(jié)構(gòu),那么使用裝飾器模式可以避免修改現(xiàn)有類的代碼,從而提高系統(tǒng)的擴(kuò)展性。

2.?靈活性:如果你的系統(tǒng)需要根據(jù)不同的需求來動態(tài)地組合不同的功能,那么使用裝飾器模式可以提供更大的靈活性。

3.?重用性:如果你的系統(tǒng)中有一些通用的功能,例如日志記錄、性能監(jiān)控等,那么使用裝飾器模式可以將這些功能封裝成裝飾器類,從而提高代碼的重用性。

4.?可維護(hù)性:如果你的系統(tǒng)中有一些復(fù)雜的功能,例如權(quán)限驗(yàn)證、數(shù)據(jù)加密等,那么使用裝飾器模式可以將這些功能封裝成裝飾器類,從而提高系統(tǒng)的可維護(hù)性。

?

四、示例代碼

?

下面是一個使用 Java 實(shí)現(xiàn)的裝飾器模式的示例代碼:

?

java 復(fù)制

public class DecoratorPatternExample {

? ? public static void main(String[] args) {

? ? ? ? // 創(chuàng)建原始對象

? ? ? ? Component component = new Component();

? ? ? ? // 創(chuàng)建裝飾對象

? ? ? ? ComponentDecorator decorator1 = new ComponentDecorator1(component);

? ? ? ? ComponentDecorator decorator2 = new ComponentDecorator2(decorator1);

? ? ? ? // 調(diào)用方法

? ? ? ? decorator2.operation();

? ? }

}

?

// 原始類

abstract class Component {

? ? public abstract void operation();

}

?

// 具體原始類

class ComponentImpl extends Component {

? ? @Override

? ? public void operation() {

? ? ? ? System.out.println("Component operation()");

? ? }

}

?

// 抽象裝飾器類

abstract class ComponentDecorator extends Component {

? ? protected Component component;

?

? ? public ComponentDecorator(Component component) {

? ? ? ? this.component = component;

? ? }

?

? ? @Override

? ? public void operation() {

? ? ? ? component.operation();

? ? }

}

?

// 具體裝飾器類 1

class ComponentDecorator1 extends ComponentDecorator {

? ? public ComponentDecorator1(Component component) {

? ? ? ? super(component);

? ? }

?

? ? @Override

? ? public void operation() {

? ? ? ? super.operation();

? ? ? ? // 添加新的功能

? ? ? ? System.out.println("ComponentDecorator1 operation()");

? ? }

}

?

// 具體裝飾器類 2

class ComponentDecorator2 extends ComponentDecorator {

? ? public ComponentDecorator2(Component component) {

? ? ? ? super(component);

? ? }

?

? ? @Override

? ? public void operation() {

? ? ? ? super.operation();

? ? ? ? // 添加新的功能

? ? ? ? System.out.println("ComponentDecorator2 operation()");

? ? }

}

?

?

在上述示例中,我們創(chuàng)建了一個原始類?Component?和兩個具體的原始類?ComponentImpl?,以及一個抽象裝飾器類?ComponentDecorator?和兩個具體的裝飾器類?ComponentDecorator1?和?ComponentDecorator2?。在?ComponentDecorator?類中,我們定義了一個?component?屬性來保存原始類的實(shí)例,并在?operation?方法中調(diào)用原始類的?operation?方法。在具體的裝飾器類中,我們可以在?operation?方法中添加新的功能,并在調(diào)用原始類的?operation?方法之前或之后執(zhí)行。

?

在?main?方法中,我們創(chuàng)建了一個原始對象?component?和兩個裝飾對象?decorator1?和?decorator2?。我們將原始對象作為參數(shù)傳遞給裝飾對象的構(gòu)造函數(shù),從而創(chuàng)建了一個裝飾對象的鏈。最后,我們調(diào)用裝飾對象的?operation?方法,從而實(shí)現(xiàn)了動態(tài)地添加新的功能。

?

裝飾器模式的優(yōu)點(diǎn)是可以在不改變原始類的基礎(chǔ)上,動態(tài)地為對象添加新的功能或行為,從而提高系統(tǒng)的擴(kuò)展性和靈活性。它的缺點(diǎn)是可能會導(dǎo)致類的層次結(jié)構(gòu)復(fù)雜,并且可能會導(dǎo)致代碼的可讀性和可維護(hù)性降低。

?12、【裝飾器模式】動態(tài)地為對象添加新功能,業(yè)務(wù)邏輯,設(shè)計模式

?

總結(jié)

一、設(shè)計思想

裝飾器模式的設(shè)計思想是將功能的添加與類的繼承解耦。

二、實(shí)現(xiàn)原理

裝飾器模式的實(shí)現(xiàn)原理是通過創(chuàng)建一個抽象裝飾器類和具體裝飾器類來實(shí)現(xiàn)的。

三、應(yīng)用場景

裝飾器模式適用于需要在不改變原始類的基礎(chǔ)上,動態(tài)地為對象添加新的功能或行為的場景。例如:

1.?日志記錄;

2.?性能監(jiān)控;

3.?權(quán)限驗(yàn)證;

4.?數(shù)據(jù)加密;

?

討論環(huán)節(jié)

為了方便你理解和鞏固今天的內(nèi)容,我給你留下兩個討論題,請在評論區(qū)與我一起討論吧。

?

1.?裝飾器模式的核心設(shè)計思想是什么?

2.?請說說你用過裝飾器模式的場景?

?

如果覺得有收獲,請雙擊支持,關(guān)注,后期我會持續(xù)更新更多相關(guān)知識。文章來源地址http://www.zghlxwxcb.cn/news/detail-861529.html

到了這里,關(guān)于12、【裝飾器模式】動態(tài)地為對象添加新功能的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Windows 12:發(fā)布日期、新功能、價格、硬件要求

    距離Windows 11首次發(fā)布僅一年時間,但關(guān)于 Windows 12 的傳言已經(jīng)開始四處流傳。有報道稱,微軟正計劃切換到Windows 的新更新周期,未來幾個月將不會發(fā)布 Windows 11 23H2 或 24H2 版本。事實(shí)上,據(jù)報道Windows 11 23H2“太陽谷3”更新已經(jīng)停止,Windows 12(代號:Next Valley)的工作已經(jīng)開

    2024年02月04日
    瀏覽(27)
  • C#12新功能主構(gòu)造函數(shù):實(shí)用,簡潔利落

    大家還記得記錄(record)類型嗎?記錄類型很像一個構(gòu)造函數(shù),那么類可以像record類型一樣使用嗎?C#12就推出了這樣的功能,這就是主構(gòu)造函數(shù)?!艾F(xiàn)在可以在任何 class 和 struct 中創(chuàng)建主構(gòu)造函數(shù)。主構(gòu)造函數(shù)不再局限于 record 類型。主構(gòu)造函數(shù)參數(shù)都在類的整個主體的范圍內(nèi)

    2024年02月03日
    瀏覽(25)
  • 今天新發(fā)布的nova12手機(jī)都有哪些新功能?

    今天新發(fā)布的nova12手機(jī)都有哪些新功能?

    12月26日,華為召開問界M9及華為冬季全場景發(fā)布會,正式推出了華為nova 12系列新品,并宣布新的三款nova產(chǎn)品正式加入先鋒計劃~我們一起看下這次華為nova12系列有那些看點(diǎn)亮點(diǎn)呢?首先這次nova12 ultra 配置很高啊,智能可變光圈,雙向北斗衛(wèi)星消息,智感支付、智能快充10分鐘快

    2024年02月03日
    瀏覽(28)
  • C++11 新功能

    C++11 新功能

    在2003年C++標(biāo)準(zhǔn)委員會曾經(jīng)提交了一份技術(shù)勘誤表(簡稱TC1),使得C++03這個名字已經(jīng)取代了C++98稱為 C++11之前的最新C++標(biāo)準(zhǔn)名稱。不過由于TC1主要是對C++98標(biāo)準(zhǔn)中的漏洞進(jìn)行修復(fù),語言的核心部分則沒 有改動,因此人們習(xí)慣性的把兩個標(biāo)準(zhǔn)合并稱為C++98/03標(biāo)準(zhǔn)。從C++0x到C++11,C+

    2023年04月12日
    瀏覽(29)
  • Java 20 新功能介紹

    Java 20 共帶來 7 個新特性功能 ,其中三個是孵化提案,孵化也就是說尚在征求意見階段,未來可能會刪除此功能。 JEP 描述 分類 429 作用域值(孵化器) Project Loom,Java 開發(fā)相關(guān) 432 Record 模式匹配(第二次預(yù)覽) Project Amber,新的語言特性 433 switch 的模式匹配(第四次預(yù)覽)

    2024年02月03日
    瀏覽(26)
  • Midjourney新功能:角色參照指南

    基本概念 角色參照(Character Reference) :這個功能允許用戶在不同的圖像生成中保持給定參照角色的一致性。 適用模型 :適用于Midjourney V6和Niji6型號。 功能亮點(diǎn) 跨風(fēng)格一致性 :可以在不同風(fēng)格(如動漫風(fēng)、寫實(shí)風(fēng))中保持角色特征一致。 面部、著裝、發(fā)型調(diào)控 :用戶可以

    2024年04月10日
    瀏覽(43)
  • 【C++】C++11 -- 新功能

    在C++11之前一個類有6個默認(rèn)成員函數(shù),在C++11標(biāo)準(zhǔn)中又新增了兩個默認(rèn)成員函數(shù),分別是移動構(gòu)造函數(shù)和移動賦值函數(shù) 默認(rèn)移動構(gòu)造和移動賦值生成的條件 移動構(gòu)造函數(shù)的生成條件:沒有自己實(shí)現(xiàn)移動構(gòu)造函數(shù),并且沒有自己實(shí)現(xiàn)析構(gòu)函數(shù),拷貝構(gòu)造函數(shù)和拷貝賦值函數(shù) 移

    2024年02月17日
    瀏覽(52)
  • TypeScript 5.1發(fā)布,新功能更新

    TypeScript 5.1發(fā)布,新功能更新

    1:返回類型增加undefined 這里設(shè)置了一個別名 fun,當(dāng)時使用它的時候,我們必須顯示返回一個 undefined 。 現(xiàn)在你可以直接設(shè)置返回類型: 而不僅限于 void any 。 4.3版本 :? 5.1版本 :? 2:getter可以設(shè)置和 setter 的不相關(guān)類型 在之前版本 ,get 返回類型應(yīng)該為 set 的子類型,如

    2024年02月09日
    瀏覽(24)
  • Microsoft Releases .NET 7新功能

    Microsoft Releases .NET 7新功能

    Microsoft Visual Studio是一種統(tǒng)一的開發(fā)體驗(yàn),使開發(fā)人員能夠跨web、云和設(shè)備創(chuàng)建多層應(yīng)用程序。11月8日,微軟發(fā)布了該強(qiáng)大開發(fā)環(huán)境的下一版本:Visual Studio 2022 17.4版。 除了修復(fù)許多頂級報告的bug之外,17.4版還包括了許多基于開發(fā)者社區(qū)建議的新功能,包括: Visual Studio的本

    2024年02月06日
    瀏覽(30)
  • 揭密.NET 8到底有什么新功能

    .NET 8 是微軟于2021年8月24日宣布的下一代編程語言和框架,它是 .NET 宇宙的一部分,與 C# (Common Language Infrastructure) 緊密集成。.NET 8 引入了許多新功能,如原生編譯、值類型 (Value Types)、結(jié)構(gòu)化并發(fā) (structured concurrency) 和快速數(shù)組 (RapidArray)。.NET 8 還支持本機(jī) (native) AOT (Ahead-Of

    2024年02月03日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包