设计模式笔记:装饰器模式 发表于 2024-03-09 | 分类于 设计模式 是一种结构型设计模式,允许用户在不改变现有对象结构的情况下向现有对象添加新的功能。 示例 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869#include <iostream>using namespace std;class Car {public: virtual void ShowMessage() { cout << "Base Car" << endl; }};class Decorator : public Car{public: Decorator() = default; Decorator(Car *car) : car_(car) {} void ShowMessage() { if (car_) { car_->ShowMessage(); cout << "Add function!" << endl; } }private: Car* car_ = nullptr;};class DecoratorA : public Decorator{public: DecoratorA(Car *car) : car_(car) {} void ShowMessage() { if (car_) { car_->ShowMessage(); cout << "Add auto {ai} function!" << endl; } }private: Car* car_ = nullptr;};class DecoratorB : public Decorator{public: DecoratorB(Car *car) : car_(car) {} void ShowMessage() { if (car_) { car_->ShowMessage(); cout << "Add auto {run} function!" << endl; } }private: Car* car_ = nullptr;};int main(){ Car* car = new Car(); car->ShowMessage(); cout << "---------" << endl; Car* addA = new DecoratorA(car); addA->ShowMessage(); cout << "=========" << endl; Car* addB = new DecoratorB(addA); addB->ShowMessage(); return 0;} 12345678Base Car---------Base CarAdd auto {ai} function!=========Base CarAdd auto {ai} function!Add auto {run} function! 总结:核心在于装饰器基类继承原始基类,使得能够动态增加功能