设计模式C++实现(3)——装饰模式
生活随笔
收集整理的這篇文章主要介紹了
设计模式C++实现(3)——装饰模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?裝飾模式:動態地給一個對象添加一些額外的職責。就增加功能來說,裝飾模式相比生成子類更為靈活。有時我們希望給某個對象而不是整個類添加一些功能。比如有一個手機,允許你為手機添加特性,比如增加掛件、屏幕貼膜等。一種靈活的設計方式是,將手機嵌入到另一對象中,由這個對象完成特性的添加,我們稱這個嵌入的對象為裝飾。這個裝飾與它所裝飾的組件接口一致,因此它對使用該組件的客戶透明。下面給出裝飾模式的UML圖。
代碼如下:
#include <iostream> #include<string> using namespace std;class Phone { public:Phone() {}virtual ~Phone() {}virtual void showDecorator()=0; };class iPhone : public Phone { private:string m_name;public:iPhone(string name): m_name(name){}void showDecorator(){cout << "phone=" << m_name << endl;} };class NokiaPhone : public Phone { private:string m_name;public:NokiaPhone(string name): m_name(name){}void showDecorator(){cout << "phone=" << m_name << endl;} };class PhoneDecorator : public Phone { private:Phone *m_phone;public:PhoneDecorator(Phone *_phone): m_phone(_phone){}void showDecorator(){m_phone->showDecorator();} };class PhoneDecatorA : public PhoneDecorator { private:void addDecorator(){cout << "add function" << endl;}public:PhoneDecatorA(Phone *s_phone):PhoneDecorator(s_phone){}void showDecorator(){PhoneDecorator::showDecorator();addDecorator();} };class PhoneDecatorB : public PhoneDecorator { private:void addDecorator(){cout << "add function" << endl;}public:PhoneDecatorB(Phone *s_phone):PhoneDecorator(s_phone){}void showDecorator(){PhoneDecorator::showDecorator();addDecorator();} };int main() {Phone *iphone = new NokiaPhone("6300");Phone *dpa = new PhoneDecatorA(iphone); //裝飾,增加掛件Phone *dpb = new PhoneDecatorB(dpa); //裝飾,屏幕貼膜dpb->showDecorator();delete dpa;delete dpb;delete iphone;return 0; }??? 裝飾模式提供了更加靈活的向對象添加職責的方式。可以用添加和分離的方法,用裝飾在運行時刻增加和刪除職責。裝飾模式提供了一種“即用即付”的方
法來添加職責。它并不試圖在一個復雜的可定制的類中支持所有可預見的特征,相反,你可以定義一個簡單的類,并且用裝飾類給它逐漸地添加功能。可以從簡單的部件組合出復雜的功能。
總結
以上是生活随笔為你收集整理的设计模式C++实现(3)——装饰模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++11新特性学习
- 下一篇: 设计模式C++实现(4)——桥接模式