1. 程式人生 > >結構型模式 裝飾模式

結構型模式 裝飾模式

增加 att void 技術分享 功能 div clu wim show

結構型模式 裝飾模式

技術分享

技術分享

適用於: 裝飾者模式(Decorator Pattern)動態的給一個對象添加一些額外的職責。就增加功能來說,此模式比生成子類更為靈活。

/**
 * 結構型模式 裝飾模式
 * 裝飾( Decorator )模式又叫做包裝模式。
 * 通過一種對客戶端透明的方式來擴展對象的功能,是繼承關系的一個替換方案。  
 * 裝飾模式就是把要添加的附加功能分別放在單獨的類中,並讓這個類包含它要裝飾的對象,當需要執行時,客戶端就可以有選擇地、按順序地使用裝飾功能包裝對象。
 *
 */

#define _CRT_SECURE_NO_WARNINGS

#include 
<iostream> #include <string> class Car { public: virtual void show() = 0; }; class RunCar: public Car { public: void Run() { std::cout << "可以跑" << std::endl; } virtual void show() override { Run(); } }; class SwimCarDirector: public
Car { public: SwimCarDirector(Car *car) { m_car = car; } void swim() { std::cout << "可以遊" << std::endl; } virtual void show() override { m_car->show(); swim(); } private: Car *m_car; }; class FlyCarDirector:public
Car { public: FlyCarDirector(Car *car) { m_car = car; } void Fly() { std::cout << "可以飛" << std::endl; } virtual void show() override { m_car->show(); Fly(); } private: Car *m_car; }; void mytest() { Car *runcar = nullptr; runcar = new RunCar(); runcar->show(); std::cout << "車開始裝飾 swim" << std::endl; SwimCarDirector *swimcar = new SwimCarDirector(runcar); swimcar->show(); std::cout << "車開始裝飾 fly" << std::endl; FlyCarDirector *flycar = new FlyCarDirector(runcar); flycar->show(); delete flycar; flycar = nullptr; delete swimcar; swimcar = nullptr; delete runcar; runcar = nullptr; return; } int main() { mytest(); system("pause"); return 0; }

結構型模式 裝飾模式