

一、代码结构解析(装饰器模式核心角色)
装饰器模式包含4个核心角色,这段代码完整实现了这些角色:
1. 抽象构件(Component):Shape 类
class Shape
{
public:
virtual void draw() = 0; // 纯虚函数,定义核心功能(绘制)
virtual ~Shape() {
} // 虚析构函数,确保子类析构正常
};
- 作用:定义所有具体构件和装饰器的统一接口(
draw()方法),是装饰器模式的基础。
2. 具体构件(Concrete Component):Circle 类
class Circle : public Shape
{
public:
void draw() override
{
std::cout << "Drawing a circle" << std::endl; // 实现具体绘制逻辑
}
};
- 作用:实现抽象构件的具体对象(这里是“圆形”),是被装饰的原始对象。
3. 抽象装饰器(Decorator):ShapeDecorator 类
class ShapeDecorator : public Shape
{
protected:
Shape* decoratedShape; // 持有一个抽象构件的指针(被装饰的对象)
public:
ShapeDecorator(Shape* shape) : decoratedShape(shape) {
} // 初始化被装饰对象
void draw() override
{
if (decoratedShape)
{
decoratedShape->draw(); // 调用被装饰对象的原始方法
}
}
};
- 作用:继承自抽象构件(确保接口一致性),同时持有一个被装饰对象的指针,是所有具体装饰器的基类。
4. 具体装饰器(Concrete Decorator):RedBorderDecorator 和 ShadowDecorator
// 给形状添加红色边框
class RedBorderDecorator : public ShapeDecorator

最低0.47元/天 解锁文章
1087

被折叠的 条评论
为什么被折叠?



