中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++設計模式之裝飾模式Decorator的示例分析

發布時間:2021-06-15 15:47:52 來源:億速云 閱讀:160 作者:小新 欄目:編程語言

小編給大家分享一下C++設計模式之裝飾模式Decorator的示例分析,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

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

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

類視圖

C++設計模式之裝飾模式Decorator的示例分析

代碼實現

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++設計模式之裝飾模式Decorator的示例分析”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

碌曲县| 文登市| 巨鹿县| 贺州市| 鄂托克旗| 门头沟区| 玉溪市| 文成县| 都安| 泉州市| 凌海市| 渭源县| 桑植县| 玉龙| 抚州市| 成安县| 广元市| 外汇| 上栗县| 资源县| 千阳县| 南和县| 嵊州市| 靖江市| 许昌市| 恩平市| 隆昌县| 滕州市| 昆山市| 梨树县| 同心县| 勐海县| 岑溪市| 浦江县| 元朗区| 色达县| 浠水县| 宁海县| 吴堡县| 永定县| 泽普县|