目录
装饰器模式(Decorator Pattern)
装饰器模式是一种结构型设计模式,它允许你动态地向一个对象添加新的行为,而不改变其接口。这种模式通过将对象放入包含行为的特殊封装对象(装饰器)中来实现。装饰器模式提供了一种灵活的替代继承的方式来扩展对象的功能。
实际应用
图形对象装饰器
假设有一个图形对象,可能需要动态地添加边框、颜色等装饰。
#include <iostream>
#include <memory>
// 图形接口
class Shape {
public:
virtual ~Shape() = default;
virtual void draw() const = 0;
};
// 具体实现:圆形
class Circle : public Shape {
public:
void draw() const override {
std::cout << "Drawing Circle\n";
}
};
// 具体实现:矩形
class Rectangle : public Shape {
public:
void draw() const override {
std::cout << "Drawing Rectangle\n";
}
};
// 装饰器基类
class ShapeDecorator : public Shape {
protected:
std::shared_ptr<Shape> decoratedShape;
public:
ShapeDecorator(std::shared_ptr<Shape> shape) : decoratedShape(shape) {}
virtual void draw() const override {
decoratedShape->draw();
}
};
// 具体装饰器:添加红色边框
class RedBorderDecorator : public ShapeDecorator {
public:
RedBorderDecorator(std::shared_ptr<Shape> shape) : ShapeDecorator(shape) {}
void draw() const override {
decoratedShape->draw();
setRedBorder();
}
void setRedBorder() const {
std::cout << "Adding Red Border\n";
}
};
// 具体装饰器:添加蓝色背景
class BlueBackgroundDecorator : public ShapeDecorator {
public:
BlueBackgroundDecorator(std::shared_ptr<Shape> shape) : ShapeDecorator(shape) {}
void draw() const override {
decoratedShape->draw();
setBlu