C++中装饰器模式通过抽象基类+具体装饰器+被装饰对象组合实现,统一接口、动态扩展职责;需定义Component接口、ConcreteComponent基础类、Decorator基类及ConcreteDecoratorA等具体装饰器。

在C++中实现装饰器模式,核心是通过组合而非继承来动态地为对象添加职责,避免类爆炸,同时保持接口统一。它不依赖语言原生的装饰器语法(如Python的@),而是靠抽象基类 + 具体装饰器类 + 被装饰对象的组合来完成。
所有被装饰的对象和装饰器都要实现同一个抽象接口,保证客户端可以透明使用:
// Component.h
class Component {
public:
virtual ~Component() = default;
virtual void operation() const = 0;
};
这是被装饰的基础对象,只提供最简功能:
// ConcreteComponent.h
class ConcreteComponent : public Component {
public:
void operation() const override {
std::cout
}
};
它持有指向Component的指针(或智能指针),并转发调用,为扩展留出钩子:
立即学习“C++免费学习笔记(深入)”;
// Decorator.h
class Decorator : public Component {
protected:
std::unique_ptr
public:
explicit Decorator(std::unique_ptr
: component_(std::move(comp)) {}
void operation() const override {
component_->operation();
}
};
每个装饰器在调用父类操作前后增加自己的逻辑,支持链式组合:
// ConcreteDecoratorA.h
class ConcreteDecoratorA : public Decorator {
public:
explicit ConcreteDecoratorA(std::unique_ptr
: Decorator(std::move(comp)) {}
void operation() const override {
std::cout
Decorator::operation();
std::cout
}
};
// ConcreteDecoratorB.h
class ConcreteDecoratorB : public Decorator {
public:
explicit ConcreteDecoratorB(std::unique_ptr
: Decorator(std::move(comp)) {}
void operation() const override {
std::cout
Decorator::operation();
std::cout
}
};
无需修改原有类,运行时自由组装功能:
// main.cpp
int main() {
auto comp = std::make_unique
auto decoratedA = std::make_unique
auto decoratedAB = std::make_unique
decoratedAB->operation();
// 输出顺序:
// ConcreteDecoratorB: before
// ConcreteDecoratorA: before
// ConcreteComponent: basic operation
// ConcreteDecoratorA: after
// ConcreteDecoratorB: after
}
关键点:用智能指针管理生命周期,避免裸指针内存泄漏;装饰器构造时接收被装饰对象,形成“包装链”;所有装饰器都遵守同一接口,客户端无感知内部结构。不复杂但容易忽略。
以上就是c++++如何实现装饰器模式 c++设计模式之Decorator【实例】的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号