中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

長沙網(wǎng)絡(luò)公司網(wǎng)站網(wǎng)絡(luò)seo啥意思

長沙網(wǎng)絡(luò)公司網(wǎng)站,網(wǎng)絡(luò)seo啥意思,查詢域名,中華室內(nèi)設(shè)計網(wǎng)公眾號下載從C編程入手設(shè)計模式——裝飾器模式 ? 我們今天玩裝飾器模式。在寫代碼的時候,我們經(jīng)常會遇到這樣的需求:在不修改原有類的情況下,給它增加一些額外的功能。比如你已經(jīng)有一個文本打印類,但現(xiàn)在你想讓它打印出來的內(nèi)容自動加上引…

從C++編程入手設(shè)計模式——裝飾器模式

? 我們今天玩裝飾器模式。在寫代碼的時候,我們經(jīng)常會遇到這樣的需求:在不修改原有類的情況下,給它增加一些額外的功能。比如你已經(jīng)有一個文本打印類,但現(xiàn)在你想讓它打印出來的內(nèi)容自動加上引號、變成大寫,甚至加上前綴或后綴。你可能第一反應(yīng)是繼承,但如果裝飾的方式有很多種,繼承的子類就會變得非常多,既麻煩又不靈活。裝飾器設(shè)計模式就是為了解決這個問題的。一句話:一個運(yùn)行時繼承的方案


所以,啥是裝飾器模式

裝飾器模式的本質(zhì),是通過“包裹”一個已有對象,動態(tài)地給它添加一些行為。這就像給一個人加上一件外套一樣,不改變他本身,但看起來更漂亮或功能更強(qiáng)。用專業(yè)一點(diǎn)的話說,裝飾器模式是一種結(jié)構(gòu)型模式,它允許我們在不改變原有對象結(jié)構(gòu)的基礎(chǔ)上,動態(tài)地添加職責(zé)。


樣板

#include <iostream>
#include <memory>class Component {
public:virtual void operation() const = 0;virtual ~Component() = default;
};class ConcreteComponent : public Component {
public:void operation() const override {std::cout << "ConcreteComponent operation\n";}
};class Decorator : public Component {
protected:std::shared_ptr<Component> component;
public:Decorator(std::shared_ptr<Component> comp) : component(std::move(comp)) {}
};class ConcreteDecoratorA : public Decorator {
public:ConcreteDecoratorA(std::shared_ptr<Component> comp) : Decorator(std::move(comp)) {}void operation() const override {std::cout << "ConcreteDecoratorA adds behavior\n";component->operation();}
};class ConcreteDecoratorB : public Decorator {
public:ConcreteDecoratorB(std::shared_ptr<Component> comp) : Decorator(std::move(comp)) {}void operation() const override {std::cout << "ConcreteDecoratorB adds behavior\n";component->operation();}
};int main() {auto simple = std::make_shared<ConcreteComponent>();auto decorator1 = std::make_shared<ConcreteDecoratorA>(simple);auto decorator2 = std::make_shared<ConcreteDecoratorB>(decorator1);decorator2->operation();return 0;
}

? 如上圖所示,這就是一個最簡單的裝飾器的樣板代碼。我們留心到,我們在構(gòu)造函數(shù)中,動態(tài)的接受基類的指針,現(xiàn)在我們就能擴(kuò)展原先的功能,實(shí)際上上面的decorator2是ConcreteComponent,ConcreteDecoratorA和ConcreteDecoratorB的組合,不信的話試試看上面的代碼?

裝飾器與繼承的對比

裝飾器模式看起來跟繼承很像,因為它也復(fù)用了接口,但它比繼承靈活得多。繼承是編譯期的靜態(tài)行為,你一旦決定了一個類的繼承關(guān)系,就很難在運(yùn)行時修改。而裝飾器是運(yùn)行時的動態(tài)組合,你可以按需添加任意多層功能,不用管組合數(shù)量,也不用寫一堆子類。


應(yīng)用場景總結(jié)

裝飾器模式非常適合用于:

  • 不希望修改已有類的前提下添加功能;
  • 想要用組合代替繼承,提升靈活性;
  • 想對某個對象添加一系列功能(如加邊框、加陰影、加滾動條);
  • 希望保持開放封閉原則(對擴(kuò)展開放,對修改封閉);

在圖形界面庫(如 Qt、Java Swing)、流操作(如 C++ 的 iostream)、Java IO、甚至日志系統(tǒng)中,都可以看到裝飾器模式的身影。

練習(xí)題

基礎(chǔ)裝飾器——文本輸出裝飾器

題目描述
設(shè)計一個基礎(chǔ)的文本輸出接口 TextPrinter,默認(rèn)實(shí)現(xiàn)是 PlainTextPrinter,直接打印字符串?,F(xiàn)在你希望加入一些裝飾器:

  • QuoteDecorator:為輸出文本添加前后引號;
  • StarDecorator:在文本兩邊加上星號 ***
  • UpperCaseDecorator:將所有輸出內(nèi)容變?yōu)榇髮憽?/li>

要求

  • 使用抽象基類 + 裝飾器類實(shí)現(xiàn);
  • 所有裝飾器都可以組合嵌套使用。

提示結(jié)構(gòu)

struct TextPrinter {virtual void print(const std::string& text) = 0;virtual ~TextPrinter() = default;
};class PlainTextPrinter : public TextPrinter {void print(const std::string& text) override;
};class TextDecorator : public TextPrinter {
protected:std::shared_ptr<TextPrinter> wrappee;
public:TextDecorator(std::shared_ptr<TextPrinter> printer);
};class QuoteDecorator : public TextDecorator { ... };
class StarDecorator : public TextDecorator { ... };
class UpperCaseDecorator : public TextDecorator { ... };

實(shí)現(xiàn)的代碼:modern-cpp-patterns-playground/Decorate/TextPrinter at main · Charliechen114514/modern-cpp-patterns-playground

http://www.risenshineclean.com/news/27625.html

相關(guān)文章:

  • 做付費(fèi)下載的網(wǎng)站怎樣做百度推廣
  • 海口免費(fèi)網(wǎng)站建設(shè)提高網(wǎng)站流量的軟文案例
  • 衡水營銷型網(wǎng)站建設(shè)軟文街官方網(wǎng)站
  • 全球十大互聯(lián)網(wǎng)公司排行榜seo優(yōu)化網(wǎng)站源碼
  • 網(wǎng)站icp備案電商培訓(xùn)心得體會
  • 有一個做名片的網(wǎng)站提高網(wǎng)站排名軟件
  • 中山網(wǎng)站制作費(fèi)用百度熱詞指數(shù)
  • 郵箱域名可以做網(wǎng)站嗎企業(yè)網(wǎng)站建設(shè)方案策劃書
  • wordpress添加頁面的代碼河北網(wǎng)站seo地址
  • 網(wǎng)絡(luò)廣告案例以及分析智能優(yōu)化網(wǎng)站
  • 做一個網(wǎng)站需要多少時間常見的網(wǎng)絡(luò)營銷策略都有哪些
  • 保潔公司在哪個網(wǎng)站做推廣比較好點(diǎn)擊排名優(yōu)化
  • 在家做十字繡兼職網(wǎng)站今日國際新聞最新消息
  • 如皋做網(wǎng)站公司品牌網(wǎng)絡(luò)營銷策劃書
  • 建設(shè)日本網(wǎng)站首頁seo優(yōu)化收費(fèi)
  • 怎么用dw做靜態(tài)網(wǎng)站如何做企業(yè)網(wǎng)頁
  • 宿州網(wǎng)站建設(shè)時間seo基礎(chǔ)教程視頻
  • app應(yīng)用程序百度小程序關(guān)鍵詞優(yōu)化
  • 網(wǎng)站建站網(wǎng)站299266co提升關(guān)鍵詞
  • 有高并發(fā) 高訪問量網(wǎng)站開發(fā)百度seo招聘
  • 怎么做企業(yè)網(wǎng)站推廣南京seo整站優(yōu)化技術(shù)
  • 本地服務(wù)器怎么做網(wǎng)站站長之家關(guān)鍵詞挖掘
  • 網(wǎng)站建設(shè)一般要多少費(fèi)用網(wǎng)絡(luò)營銷的含義
  • 購物網(wǎng)站后臺好管理嗎百度seo原理
  • 代駕app軟件開發(fā)公司seo推廣怎么做
  • 個性化定制網(wǎng)站的特點(diǎn)一站式自媒體服務(wù)平臺
  • 做電子商務(wù)網(wǎng)站需要學(xué)什么2024年3月新冠高峰
  • 企業(yè)網(wǎng)站建設(shè)的必要性百度收錄比較好的網(wǎng)站
  • aspaccess做網(wǎng)站站長平臺百度
  • 煙臺快速建站有哪些公司低價刷粉網(wǎng)站推廣