← 返回博客列表

模式特点

动态地给一个对象添加额外的职责。装饰器模式比子类继承更加灵活,可以在运行时组合各种功能。

类图

类图

应用场景

示例代码(C++)

// 组件接口
class DataSource {
public:
    virtual void writeData(const std::string& data) = 0;
    virtual ~DataSource() = default;
};

// 具体组件
class FileDataSource : public DataSource {
public: void writeData(const std::string& data) override {
    std::cout << "写入文件: " << data << std::endl; }};

// 装饰器基类
class DataSourceDecorator : public DataSource {
protected: DataSource* m_wrappee;
public:
    DataSourceDecorator(DataSource* ds) : m_wrappee(ds) {}
    void writeData(const std::string& data) override { m_wrappee->writeData(data); }
};

// 加密装饰器
class EncryptionDecorator : public DataSourceDecorator {
public:
    EncryptionDecorator(DataSource* ds) : DataSourceDecorator(ds) {}
    void writeData(const std::string& data) override {
        std::string encrypted = "[ENC]" + data;  // 模拟加密
        m_wrappee->writeData(encrypted);
    }
};

// 使用:灵活组合多层装饰
DataSource* ds = new EncryptionDecorator(
    new FileDataSource()
);
ds->writeData("敏感数据");  // 先加密再写入