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

(二)結(jié)構(gòu)型模式:5、裝飾器模式(Decorator Pattern)(C++實(shí)例)

這篇具有很好參考價(jià)值的文章主要介紹了(二)結(jié)構(gòu)型模式:5、裝飾器模式(Decorator Pattern)(C++實(shí)例)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

1、裝飾器模式(Decorator Pattern)含義

2、裝飾器模式的UML圖學(xué)習(xí)

3、裝飾器模式的應(yīng)用場(chǎng)景

4、裝飾器模式的優(yōu)缺點(diǎn)

5、C++實(shí)現(xiàn)裝飾器模式的簡(jiǎn)單實(shí)例


1、裝飾器模式(Decorator Pattern)含義

裝飾模式(Decorator),動(dòng)態(tài)地給一個(gè)對(duì)象添加一些額外地職責(zé),就增加功能來說,裝飾模式比生成子類更為靈活【DP】

裝飾模式(Decorator Pattern)是一種結(jié)構(gòu)型設(shè)計(jì)模式,它允許你在不改變現(xiàn)有對(duì)象結(jié)構(gòu)的情況下,動(dòng)態(tài)地向?qū)ο筇砑宇~外的功能。

裝飾模式通過將對(duì)象包裝在裝飾器類中,實(shí)現(xiàn)了透明地?cái)U(kuò)展對(duì)象的能力。

2、裝飾器模式的UML圖學(xué)習(xí)

(二)結(jié)構(gòu)型模式:5、裝飾器模式(Decorator Pattern)(C++實(shí)例),設(shè)計(jì)模式,裝飾器模式,開發(fā)語(yǔ)言,c++,設(shè)計(jì)模式

?組成元素:

(1)Component是定義一個(gè)對(duì)象接口,可以給這些對(duì)象動(dòng)態(tài)地添加職責(zé);

(2)ConcreteComponent是定義了一個(gè)具體地對(duì)象,也可以給這個(gè)對(duì)象添加一些職責(zé);

(3)Decorator,裝飾抽象類,繼承了Component,從外類來擴(kuò)展Component類的功能,但對(duì)于Component來說,是無需知道Decorator的存在的。至于ConcreteDecorator就是具體的裝飾對(duì)象,起到給Component添加職責(zé)的功能【DPE】

3、裝飾器模式的應(yīng)用場(chǎng)景

(1)IO流操作:在IO流中,可以使用裝飾器模式來添加緩沖、加密、壓縮等功能,而無需修改原始的IO類。

(2)GUI組件:在圖形用戶界面中,可以使用裝飾器模式來為組件添加邊框、滾動(dòng)條、陰影等外觀效果。

(3)日志記錄:可以使用裝飾器模式來為日志記錄器添加時(shí)間戳、日志級(jí)別等額外信息。

(4)權(quán)限控制:可以使用裝飾器模式來為對(duì)象添加權(quán)限驗(yàn)證、身份認(rèn)證等功能。

總之,裝飾器模式適用于需要?jiǎng)討B(tài)地為對(duì)象添加功能,并且希望保持對(duì)象接口的一致性的場(chǎng)景。

它提供了一種靈活、可擴(kuò)展和可維護(hù)的方式來處理對(duì)象功能的變化和組合。

4、裝飾器模式的優(yōu)缺點(diǎn)

(1)優(yōu)點(diǎn):

1)動(dòng)態(tài)地為對(duì)象添加功能:裝飾器模式允許在運(yùn)行時(shí)動(dòng)態(tài)地為對(duì)象添加額外的功能,而無需修改原始對(duì)象的結(jié)構(gòu)。這對(duì)于需要靈活地?cái)U(kuò)展對(duì)象功能的情況非常有用。

2)避免使用子類進(jìn)行擴(kuò)展:通過使用裝飾器模式,可以避免創(chuàng)建大量的子類來實(shí)現(xiàn)不同組合的功能。相反,可以通過組合和堆疊裝飾器來實(shí)現(xiàn)各種功能組合,從而更好地管理和維護(hù)代碼。

3)對(duì)象功能的透明性:裝飾器模式使得客戶端可以透明地使用被裝飾對(duì)象和裝飾后的對(duì)象,無需關(guān)心具體對(duì)象的類型。這樣可以簡(jiǎn)化客戶端代碼,并且使得代碼更加清晰易懂。

4)單一職責(zé)原則:裝飾器模式可以將功能劃分到不同的裝飾器中,每個(gè)裝飾器只負(fù)責(zé)一個(gè)特定的功能,符合單一職責(zé)原則。這樣可以使得代碼更加可維護(hù)和可擴(kuò)展。

(2)缺點(diǎn):

1)增加復(fù)雜性:使用裝飾器模式會(huì)引入更多的類和對(duì)象,從而增加了系統(tǒng)的設(shè)計(jì)復(fù)雜性。這可能會(huì)導(dǎo)致代碼結(jié)構(gòu)變得復(fù)雜,不易理解和維護(hù)。

2)多層裝飾影響性能:當(dāng)使用多個(gè)裝飾器進(jìn)行功能堆疊時(shí),可能會(huì)對(duì)性能產(chǎn)生一定的影響。每個(gè)裝飾器都會(huì)增加額外的處理邏輯,可能會(huì)導(dǎo)致性能下降。

3)可能造成對(duì)象過度膨脹:如果使用過多的裝飾器或者裝飾器的組合方式不合理,可能會(huì)導(dǎo)致對(duì)象過度膨脹,使得系統(tǒng)資源消耗增加。

總結(jié):盡管裝飾器模式存在一些缺點(diǎn),但它仍然是一種強(qiáng)大且常用的設(shè)計(jì)模式,特別適用于需要?jiǎng)討B(tài)地為對(duì)象添加功能的場(chǎng)景。

在使用裝飾器模式時(shí),需要根據(jù)具體的需求和系統(tǒng)設(shè)計(jì)來權(quán)衡其優(yōu)缺點(diǎn),并確保合理地應(yīng)用該模式。

5、C++實(shí)現(xiàn)裝飾器模式的簡(jiǎn)單實(shí)例

#include <iostream>

// 抽象組件
class Component 
{
public:
    virtual void operation() const = 0;
};

// 具體組件
class ConcreteComponent : public Component 
{
public:
    void operation() const override 
    {
        std::cout << "ConcreteComponent operation" << std::endl;
    }
};

// 抽象裝飾器
class Decorator : public Component 
{
protected:
    Component* component;

public:
    Decorator(Component* component) : component(component) {}

    void operation() const override 
    {
        if (component != nullptr) 
        {
            component->operation();
        }
    }
};

// 具體裝飾器
class ConcreteDecorator : public Decorator 
{
public:
    ConcreteDecorator(Component* component) : Decorator(component) {}

    void operation() const override 
    {
        Decorator::operation();
        additionalOperation();
    }

    void additionalOperation() const 
    {
        std::cout << "Additional operation" << std::endl;
    }
};

int main()
 {
    // 創(chuàng)建具體組件對(duì)象
    Component* component = new ConcreteComponent();

    // 使用具體裝飾器包裝具體組件對(duì)象
    Component* decoratedComponent = new ConcreteDecorator(component);

    // 調(diào)用裝飾后的操作方法
    decoratedComponent->operation();

    delete decoratedComponent;
    delete component;

    return 0;
}

在上述示例中,我們定義了一個(gè) Component 接口作為抽象組件,其中包含了一個(gè) operation 方法。ConcreteComponent 類表示具體組件,實(shí)現(xiàn)了抽象組件的接口。

Decorator 類是抽象裝飾器,繼承自 Component,并且持有一個(gè) Component 的引用。它通過該引用調(diào)用被裝飾對(duì)象的方法。

ConcreteDecorator 類是具體裝飾器,繼承自 Decorator,并實(shí)現(xiàn)了具體的裝飾邏輯。在 operation 方法中,它先調(diào)用父類的 operation 方法,然后執(zhí)行額外的操作。

在 main 函數(shù)中,我們創(chuàng)建了一個(gè)具體組件對(duì)象 component,并使用具體裝飾器 ConcreteDecorator 對(duì)其進(jìn)行包裝。最后,調(diào)用裝飾后的操作方法 decoratedComponent->operation(),會(huì)先執(zhí)行具體組件的操作方法,然后執(zhí)行具體裝飾器的額外操作。

運(yùn)行以上代碼,輸出將會(huì)是:

ConcreteComponent operation

Additional operation

可以看到,通過裝飾模式,我們?cè)诓桓淖兙唧w組件對(duì)象的情況下,動(dòng)態(tài)地為其添加了額外的功能。文章來源地址http://www.zghlxwxcb.cn/news/detail-661228.html

到了這里,關(guān)于(二)結(jié)構(gòu)型模式:5、裝飾器模式(Decorator Pattern)(C++實(shí)例)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 【結(jié)構(gòu)型模式】裝飾者模式

    【結(jié)構(gòu)型模式】裝飾者模式

    裝飾模式 — Graphic Design Patterns 設(shè)計(jì)模式 | 裝飾者模式及典型應(yīng)用 黑馬程序員Java設(shè)計(jì)模式詳解-裝飾者模式概述 裝飾者模式 ( Decorator )是一種結(jié)構(gòu)型設(shè)計(jì)模式,它允許你在 不改變 對(duì)象自身的基礎(chǔ)上, 動(dòng)態(tài) 地給一個(gè)對(duì)象 添加額外的功能 。該模式是通過創(chuàng)建一個(gè)包裝對(duì)象來實(shí)

    2023年04月15日
    瀏覽(64)
  • 結(jié)構(gòu)型模式-裝飾者模式

    結(jié)構(gòu)型模式-裝飾者模式

    概述 我們先來看一個(gè)快餐店的例子。 快餐店有炒面、炒飯這些快餐,可以額外附加雞蛋、火腿、培根這些配菜,當(dāng)然加配菜需要額外加錢,每個(gè)配菜的價(jià)錢通常不太一樣,那么計(jì)算總價(jià)就會(huì)顯得比較麻煩。 使用繼承的方式存在的問題: 擴(kuò)展性不好 如果要再加一種配料(火

    2024年02月01日
    瀏覽(30)
  • 結(jié)構(gòu)型模式(Structural Pattern)

    模式介紹 結(jié)構(gòu)型模式(Structural Pattern)的主要目的就是 將不同的類和對(duì)象組合在一起,形成更大或者更復(fù)雜的結(jié)構(gòu)體 。該模式并不是簡(jiǎn)單地將這些類或?qū)ο髷[放在一起,而是要 提供它們之間的關(guān)聯(lián)方式 。不同的結(jié)構(gòu)型模式從不同的角度來組合類或?qū)ο螅鼈儽M可能滿足各

    2024年02月03日
    瀏覽(18)
  • 設(shè)計(jì)模式【結(jié)構(gòu)型】-- 裝飾者模式

    設(shè)計(jì)模式【結(jié)構(gòu)型】-- 裝飾者模式

    裝飾者模式是一種 結(jié)構(gòu)型設(shè)計(jì)模式 ,它允許你動(dòng)態(tài)地將新功能添加到對(duì)象中,通過將對(duì)象放入包含這些功能的特殊包裝器對(duì)象中。這樣一來,你可以在運(yùn)行時(shí)通過組合不同的對(duì)象來擴(kuò)展功能,而不是通過繼承修改代碼。 大白話 : 裝飾模式,是指在不改變?cè)袑?duì)象的基礎(chǔ)上

    2024年02月16日
    瀏覽(31)
  • 結(jié)構(gòu)型-代理模式(Proxy Pattern)

    代理模式和適配器模式有什么區(qū)別?下面用兩個(gè)示例來說明 適配器模式:假設(shè)你在家里有一個(gè)電源插座,但是你的筆記本電腦的電源線的插頭是美國(guó)標(biāo)準(zhǔn)的,無法直接插到家里的電源插座中。這時(shí),你可以使用一個(gè)適配器來解決這個(gè)問題。 代理模式:假設(shè)你家里有一個(gè)保姆

    2024年02月15日
    瀏覽(24)
  • 第八章結(jié)構(gòu)型模式—裝飾者模式

    第八章結(jié)構(gòu)型模式—裝飾者模式

    結(jié)構(gòu)型模式描述如何將類或?qū)ο蟀茨撤N布局組成更大的結(jié)構(gòu),有以下兩種: 類結(jié)構(gòu)型模式 :采用繼承機(jī)制來組織接口和類。 對(duì)象結(jié)構(gòu)型模式 :釆用組合或聚合來組合對(duì)象。 由于組合關(guān)系或聚合關(guān)系比繼承關(guān)系耦合度低,滿足 “合成復(fù)用原則”,所以對(duì)象結(jié)構(gòu)型模式比類結(jié)

    2024年02月05日
    瀏覽(19)
  • 笨蛋學(xué)設(shè)計(jì)模式結(jié)構(gòu)型模式-裝飾者模式【9】

    7.3.1概念 ? 裝飾者模式通過在一個(gè)現(xiàn)有對(duì)象中,能動(dòng)態(tài)的給該對(duì)象添加新的功能,同時(shí)不改變對(duì)象本身的結(jié)構(gòu),是繼承的一種替代方案,可以實(shí)現(xiàn)在不定義子類的情況下,運(yùn)行時(shí)動(dòng)態(tài)地?cái)U(kuò)展對(duì)象的行為(給對(duì)象添加一些額外的功能),而無需修改原有代碼。 7.3.2場(chǎng)景 ? 當(dāng)我們

    2024年01月17日
    瀏覽(24)
  • 【地鐵上的設(shè)計(jì)模式】--結(jié)構(gòu)型模式:裝飾器模式

    什么是裝飾器模式 裝飾器模式是一種結(jié)構(gòu)型設(shè)計(jì)模式,它允許你通過將對(duì)象放入包含行為的特殊封裝對(duì)象中來為原對(duì)象添加新的行為,同時(shí)又不改變?cè)袑?duì)象的結(jié)構(gòu)。裝飾器模式中,包裝器對(duì)象和被包裝對(duì)象實(shí)現(xiàn)了相同的接口,因此客戶端無需知道具體的實(shí)現(xiàn)細(xì)節(jié),只需通過

    2024年02月02日
    瀏覽(25)
  • 【設(shè)計(jì)模式】第11節(jié):結(jié)構(gòu)型模式之“裝飾器模式”

    【設(shè)計(jì)模式】第11節(jié):結(jié)構(gòu)型模式之“裝飾器模式”

    裝飾器模式主要解決繼承關(guān)系過于復(fù)雜的問題,通過組合來替代繼承。它主要的作用是給原始類添加增強(qiáng)功能。這也是判斷是否該用裝飾器模式的一個(gè)重要的依據(jù)。除此之外,裝飾器模式還有一個(gè)特點(diǎn),那就是可以對(duì)原始類嵌套使用多個(gè)裝飾器。為了滿足這個(gè)應(yīng)用場(chǎng)景,在設(shè)

    2024年02月06日
    瀏覽(20)
  • Java設(shè)計(jì)模式之結(jié)構(gòu)型-裝飾器模式(UML類圖+案例分析)

    Java設(shè)計(jì)模式之結(jié)構(gòu)型-裝飾器模式(UML類圖+案例分析)

    目錄 一、基本概念 二、UML類圖 三、角色設(shè)計(jì) 四、代碼實(shí)現(xiàn) 案例一 案例二? 五、總結(jié)? 裝飾器模式是指不必在改變?cè)械念惡筒皇褂美^承的情況下,動(dòng)態(tài)擴(kuò)展一個(gè)對(duì)象的功能。 角色 描述 抽象構(gòu)件 是一個(gè)接口或者抽象類,定義我們最核心的對(duì)象 具體構(gòu)件 抽象構(gòu)件的實(shí)現(xiàn),

    2024年02月11日
    瀏覽(26)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包