溫馨提示×

溫馨提示×

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

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

C++設計模式之裝飾模式怎么實現(xiàn)

發(fā)布時間:2022-04-15 10:59:10 來源:億速云 閱讀:121 作者:iii 欄目:編程語言

本文小編為大家詳細介紹“C++設計模式之裝飾模式怎么實現(xiàn)”,內(nèi)容詳細,步驟清晰,細節(jié)處理妥當,希望這篇“C++設計模式之裝飾模式怎么實現(xiàn)”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

裝飾模式是一種經(jīng)典的類功能擴展模式,其精髓在裝飾類使用繼承加聚合的方式獲得接口和要實現(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++設計模式之裝飾模式怎么實現(xiàn)”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領(lǐng)會,如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

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

c++
AI