装饰器模式通过组合扩展对象功能,避免类爆炸。核心为组件接口、具体组件、装饰器基类与具体装饰器,支持运行时动态叠加行为,如日志与权限检查,灵活且符合开闭原则。

装饰器模式在C++中是一种结构型设计模式,用于在不修改原有类的前提下,动态地给对象添加新的行为。相比继承,它更灵活,避免了类爆炸问题,特别适合需要在运行时组合功能的场景。
通过组合而非继承来扩展功能。装饰器类持有被装饰对象的实例,对外提供与原对象相同的接口,在调用前后可以添加额外逻辑。
关键点:
#include <iostream>
#include <memory>
// 抽象组件
class Component {
public:
virtual ~Component() = default;
virtual void operation() const = 0;
};
// 具体组件
class ConcreteComponent : public Component {
public:
void operation() const override {
std::cout << "基础功能执行\n";
}
};
// 装饰器基类
class Decorator : public Component {
protected:
std::shared_ptr<Component> component_;
public:
explicit Decorator(std::shared_ptr<Component> comp) : component_(comp) {}
void operation() const override {
component_->operation();
}
};
// 具体装饰器A:添加日志
class LoggingDecorator : public Decorator {
public:
using Decorator::Decorator;
void operation() const override {
std::cout << "[日志] 开始执行操作\n";
Decorator::operation();
std::cout << "[日志] 操作完成\n";
}
};
// 具体装饰器B:添加权限检查
class SecurityDecorator : public Decorator {
public:
using Decorator::Decorator;
void operation() const override {
std::cout << "[安全] 正在校验权限...\n";
// 模拟权限通过
Decorator::operation();
}
};
可以在运行时根据需要叠加多个装饰器,实现行为的动态添加:
立即学习“C++免费学习笔记(深入)”;
int main() {
auto comp = std::make_shared<ConcreteComponent>();
// 只有基础功能
comp->operation();
// 添加日志
auto logged = std::make_shared<LoggingDecorator>(comp);
logged->operation();
// 再添加安全检查
auto secured = std::make_shared<SecurityDecorator>(logged);
secured->operation();
return 0;
}
输出结果:
基础功能执行 [日志] 开始执行操作 基础功能执行 [日志] 操作完成 [安全] 正在校验权限... [日志] 开始执行操作 基础功能执行 [日志] 操作完成
这种模式适用于以下情况:
优势:灵活性高,符合开闭原则,易于复用和组合。相比多重继承更安全清晰。
基本上就这些,掌握好接口一致性和组合顺序,就能有效利用装饰器模式扩展对象行为。以上就是C++装饰器模式动态添加行为方法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号