設計模式裝飾模式

 

一、什麼是裝飾模式

  還記得我的一個長輩曾經買了一部手機,買的時候還好好的新新的,剛拿到家就壞了,怎麼回事呢?其實就是一個假手機,把一個已經報廢的舊機子改了改,外面加了個新殼子罷了,這就是一個裝飾模式,在原有的基礎上加了些東西。

  裝飾模式(Decorator),動態地給一個對象添加一些額外的職責,就增加功能來說,裝飾模式比生成子類更靈活。裝飾器模式屬於結構型模式。

     答:裝飾器模式是指動態地給一個對象增加一些額外的功能,同時又不改變其結構。

    優點:裝飾類和被裝飾類可以獨立發展,不會相互耦合,裝飾模式是繼承的一個替代模式,裝飾模式可以動態擴展一個實現類      的功能。

    裝飾器模式的關鍵:裝飾器中使用了被裝飾的對象。

    比如,創建一個對象“laowang”,給對象添加不同的裝飾,穿上夾克、戴上帽子......,這個執行過程就是裝飾者模式,

 

UML結構圖如下:

  其中,Component是抽象構件,定義一個對象接口,可以給這些對象動態地添加職責;ConreteComponent定義一個具體對象,也可以給這個對象添加一些職責;Decorator是裝飾抽象類,實現接口或抽象方法;ConreteDecorator是具體裝飾對象,起到給Component添加職責的功能。

#include <iostream>
using namespace  std;
class Car{
public:
    virtual void show()=0;
};
class Runcar : public Car{
public:
   virtual void show(){
      cout<<"car can run"<<endl;
    }
};
class swimcar : public Car{
public:
    swimcar(Car* p){
        m_p=p;
    }
    void  swim(){
        cout<<"can swim"<<endl;
    }
    virtual void show(){
        m_p->show();
        swim();
    }
private:
    Car* m_p;
};
class flycar : public Car{
 public:
    flycar(Car *p){
        m_p=p;
    }
    void fly(){
        cout<<"car can fly";
    }
    virtual void show(){
        m_p->show();
        fly();

    }
 private:
   Car * m_p;
};
int main()
{
    Runcar* runcar=new Runcar;
    //runcar->show();
    swimcar *sw=new swimcar(runcar);
    //sw->show();
   // delete  sw;
    flycar  *fly=new flycar(sw);
    fly->show();
    delete  fly;
    delete  sw;
    sw=NULL;
    fly=NULL;
    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章