装饰器模式提供四种C++实现方式:一、继承组合式基类设计;二、模板包装器无侵入装饰;三、std::variant多态装饰链;四、RAII自动生命周期管理。

如果您希望在 C++ 中为对象动态添加职责而不修改其原有代码,装饰器模式提供了一种灵活的结构化方式。以下是实现轻量级装饰器模式的具体步骤:
一、基于继承与组合的装饰器基类设计
该方法通过定义抽象组件接口和装饰器基类,使具体装饰器可逐层叠加功能。核心在于保持接口一致性,并将操作委托给被装饰对象。
1、声明抽象组件接口 Component,包含纯虚函数 operation()。
2、定义装饰器基类 Decorator,私有持有 std::unique_ptr
立即学习“C++免费学习笔记(深入)”;
3、Decorator 公共继承 Component,其 operation() 默认调用被装饰对象的同名函数。
二、使用模板包装器实现无侵入式装饰
该方法避免虚函数开销与继承层级,利用模板和可调用对象封装行为增强逻辑,适用于已知类型且强调性能的场景。
1、定义模板类 FunctionDecorator,接受任意可调用对象(如 lambda、函数指针)作为增强逻辑。
2、在构造函数中保存原始对象引用及装饰逻辑,重载 operator() 实现前置/后置增强。
3、通过 std::function 或直接模板参数推导捕获上下文,确保装饰逻辑能访问目标对象状态。
三、借助 std::variant 与访问者实现多态装饰链
该方法支持运行时动态组合多种装饰行为,避免深度继承,利用类型安全的联合体管理不同装饰器实例。
1、定义 DecoratorChain 类型为 std::variant
2、每个具体装饰器类型实现统一的 apply(Component&) 接口,并通过 std::visit 按序执行。
3、链式构造时使用 std::make_variant_alternative_t 或辅助工厂函数逐层包裹,保持装饰顺序可控。
四、采用 RAII 机制自动管理装饰生命周期
该方法确保装饰逻辑在作用域进出时自动触发,适用于资源监控、计时、日志等需严格匹配生命周期的场景。
1、定义装饰器类 ScopeGuardDecorator,构造时执行前置逻辑(如记录开始时间),析构时执行后置逻辑(如输出耗时)。
2、将目标对象以引用或指针形式传入,并在内部保存弱绑定关系,避免所有权争议。
3、通过 operator->() 和 operator*() 重载,使装饰器对象可像原生指针一样透明使用被装饰对象。


















