欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++設計模式之裝飾模式(Decorator)

 更新時間:2018年03月28日 10:59:43   作者:http://www.cnblogs.com/chencarl/p/8649394.html  
這篇文章主要為大家詳細介紹了C++設計模式之裝飾模式Decorator的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下

裝飾模式是一種經典的類功能擴展模式,其精髓在裝飾類使用繼承加聚合的方式獲得接口和要實現(xiàn)對象,然后通過自己實現(xiàn)擴展接口

作用
裝飾模式通過裝飾類動態(tài)地將責任附加到對象上,若要擴展功能,無需通過繼承增加子類就能擴展對象的新功能,提供了比繼承更有彈性的替代方案,避免了子類數(shù)量膨脹帶來的系統(tǒng)臃腫。

類視圖

代碼實現(xiàn)

class Component
{
public:
  Component(){}
  virtual ~Component(){}

  virtual void operation() = 0;
};


class ConcreteComponentA : public Component
{
public:
  ConcreteComponentA(){}
  ~ConcreteComponentA(){}

  void operation()
  {
    fprintf(stderr, "ConcreteComponentA's operation!\n");
  }
};

class ConcreteComponentB : public Component
{
public:
  ConcreteComponentB(){}
  ~ConcreteComponentB(){}

  void operation()
  {
    fprintf(stderr, "ConcreteComponentB's operation!\n");
  }
};

class Decorator : public Component
{
public:
  Decorator() :mComponent(NULL){}
  virtual ~Decorator(){}

  virtual void operation()
  {
    if (mComponent)
      mComponent->operation();
  }
  virtual void setComponent(Component* pComponent)
  {
    mComponent = pComponent;
  }

protected:
  Component* mComponent;
};


class ConcreteDecoratorE : public Decorator
{
public:
  ConcreteDecoratorE ();
  virtual ~ConcreteDecoratorE ();

  virtual void addBehavior()
  {
    mComponent->operation();
    fprintf(stderr, "ConcreteDecoratorE's addBehavior!\n");
  }
};

class ConcreteDecoratorF : public Decorator
{
public:
  ConcreteDecoratorF ();
  virtual ~ConcreteDecoratorF ();

  virtual void addBehavior()
  {
    operation();
    fprintf(stderr, "ConcreteDecoratorF's addBehavior!\n");
  }
};


int main()
{
  ConcreteComponentB *pComponent = new ConcreteComponentB();
  ConcreteDecoratorF decorator;
  decorator.setComponent(pComponent);
  decorator.addBehavior();
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • C++設計模式之觀察者模式

    C++設計模式之觀察者模式

    這篇文章主要介紹了C++設計模式之觀察者模式,本文講解了什么是觀察者模式、觀察者模式的UML類圖、觀察者模式的使用場合等內容,需要的朋友可以參考下
    2014-10-10
  • 使用C語言的fork()函數(shù)在Linux中創(chuàng)建進程的實例講解

    使用C語言的fork()函數(shù)在Linux中創(chuàng)建進程的實例講解

    這篇文章主要介紹了使用C語言的fork()函數(shù)在Linux中創(chuàng)建進程的實例講解,fork在父進程下創(chuàng)建出的子進程可以與父進程一起來多進程運行同一個程序,需要的朋友可以參考下
    2016-06-06
  • QT中對Mat類的一些操作詳解

    QT中對Mat類的一些操作詳解

    本文主要介紹了QT中對Mat類的一些操作詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • 淺析C++中dynamic_cast和static_cast實例語法詳解

    淺析C++中dynamic_cast和static_cast實例語法詳解

    這篇文章主要介紹了淺析C++中dynamic_cast和static_cast實例演示,包括static_cast語法知識和static_cast的作用講解,namic_cast 語法詳解,需要的朋友可以參考下
    2021-07-07
  • 剖析C語言關鍵字之void,const,return

    剖析C語言關鍵字之void,const,return

    這篇文章主要為大家介紹了C語言關鍵字之void,const,return,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • 詳解C語言中的常量指針和指針常量

    詳解C語言中的常量指針和指針常量

    這篇文章主要介紹了詳解C語言中的常量指針和指針常量,包括其之間的區(qū)別是C語言入門學習中的基礎知識,需要的朋友可以參考下
    2015-08-08
  • 簡單談談C語言中的= 和==、!=

    簡單談談C語言中的= 和==、!=

    這篇文章主要給大家介紹了關于C語言中= 和==、!=的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • C語言實現(xiàn)考勤管理系統(tǒng)

    C語言實現(xiàn)考勤管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)考勤管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • sqlserver,sqlite,access數(shù)據(jù)庫鏈接字符串整理

    sqlserver,sqlite,access數(shù)據(jù)庫鏈接字符串整理

    本節(jié)主要整理sqlserver,sqlite,access數(shù)據(jù)庫鏈接字符串,有需要的朋友可以參考下
    2014-07-07
  • Visual Studio 2022 的安裝和創(chuàng)建C++項目(圖文教程)

    Visual Studio 2022 的安裝和創(chuàng)建C++項目(圖文教程)

    本文主要介紹了Visual Studio 2022 的安裝和創(chuàng)建C++項目,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05

最新評論