装饰器模式通过组合动态扩展对象功能,避免继承导致的类爆炸,适用于C++中需灵活添加职责的场景。

在C++中实现装饰器模式,可以灵活地在运行时动态添加对象功能,而不改变原有类的结构。这种设计模式属于结构型模式,核心思想是通过组合的方式,为对象添加新行为,避免使用继承带来的类爆炸问题。
装饰器模式包含以下几个关键角色:
以下是一个简单的C++示例,展示如何通过装饰器模式为一个文本显示功能动态添加边框和滚动条:
// 组件接口 class Display { public: virtual ~Display() = default; virtual void show() = 0; };
// 具体组件:基础文本显示 class TextDisplay : public Display { std::string text; public: explicit TextDisplay(const std::string& t) : text(t) {} void show() override { std::cout << text; } };
// 装饰器基类 class DisplayDecorator : public Display { protected: Display display; public: explicit DisplayDecorator(Display d) : display(d) {} void show() override { display->show(); } };
// 具体装饰器:添加边框 class BorderDecorator : public DisplayDecorator { public: explicit BorderDecorator(Display* d) : DisplayDecorator(d) {} void show() override { std::cout << "["; DisplayDecorator::show(); std::cout << "]"; } };
// 具体装饰器:添加滚动条 class ScrollDecorator : public DisplayDecorator { public: explicit ScrollDecorator(Display* d) : DisplayDecorator(d) {} void show() override { std::cout << "↑"; DisplayDecorator::show(); std::cout << "↓"; } };
使用方式:
立即学习“C++免费学习笔记(深入)”;
int main() { Display* display = new TextDisplay("Hello World");display = new BorderDecorator(display); // 添加边框 display = new ScrollDecorator(display); // 添加滚动条 display->show(); // 输出:↑[Hello World]↓ delete display; // 注意:实际中应使用智能指针管理内存 return 0;
}
装饰器模式的优势在于:
常见应用场景包括:I/O流处理、GUI组件增强、日志记录、权限控制等需要逐层添加行为的场合。
使用时注意内存管理,建议结合智能指针(如std::unique_ptr)避免内存泄漏。
基本上就这些。
以上就是C++装饰器模式 动态添加对象功能的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号