《設計模式》學習筆記——裝飾模式
阿新 • • 發佈:2018-12-17
裝飾模式(Decorator Pattern)指的是在不必改變原類檔案和使用繼承的情況下,動態地擴充套件一個物件的功能.它是通過建立一個包裝物件,也就是裝飾來包裹真實的物件。
DecoratorPattern.h
#pragma once #include<iostream> #include<string> class Car { public: virtual void show(void) = 0; }; class RunCar:public Car { public: virtual void show(void) { std::cout << "可以跑" << std::endl; } private: protected: }; // 裝飾類 class SwimCarDecorator:public Car { public: SwimCarDecorator(Car* car):m_car(car) {} ~SwimCarDecorator() {delete m_car;} virtual void show(void) { // 執行原有功能 m_car->show(); // 執行裝飾功能 swim(); } private: Car * m_car; void swim(void) { std::cout << "會游泳" << std::endl; } protected: }; // 裝飾類 class FlayCarDecorator :public Car { public: FlayCarDecorator(Car* car) :m_car(car) {} ~FlayCarDecorator() { delete m_car; } virtual void show(void) { // 執行原有功能 m_car->show(); // 執行裝飾功能 flay(); } private: Car * m_car; void flay(void) { std::cout << "能夠飛" << std::endl; } protected: }; class DecoratorPattern { public: DecoratorPattern() {}; ~DecoratorPattern() {}; };
DecoratorPattern.cpp
#include "DecoratorPattern.h"
mainTest.cpp
#include<iostream> #include"DecoratorPattern.h" int main(void) { Car* car = nullptr; car = new RunCar; car->show(); FlayCarDecorator* flayCar = new FlayCarDecorator(car); flayCar->show(); SwimCarDecorator* swimCar = new SwimCarDecorator(flayCar); swimCar->show(); delete swimCar; delete flayCar; delete car; system("pause"); return 0; }