【设计模式】装饰器模式(Decorator Pattern)

定义

装饰器模式(Decorator Pattern)是一种结构型设计模式。

装饰器模式通过创建一个装饰类,包装原始对象,并在保持原始对象接口不变的情况下,扩展其功能。

模式示例

cpp 复制代码
#include <iostream>
#include <string>

// 基础文本输出类
class TextOutput {
public:
    virtual void write(const std::string& text) {
        std::cout << text;
    }
};

// 装饰器基类
class TextDecorator : public TextOutput {
protected:
    TextOutput* textOutput;
public:
    TextDecorator(TextOutput* output) : textOutput(output) {}
    void write(const std::string& text) override {
        textOutput->write(text);
    }
};

// 具体的装饰器类:粗体
class BoldDecorator : public TextDecorator {
public:
    BoldDecorator(TextOutput* output) : TextDecorator(output) {}
    void write(const std::string& text) override {
        std::cout << "<b>" << text << "</b>";
    }
};

// 具体的装饰器类:斜体
class ItalicDecorator : public TextDecorator {
public:
    ItalicDecorator(TextOutput* output) : TextDecorator(output) {}
    void write(const std::string& text) override {
        std::cout << "<i>" << text << "</i>";
    }
};

int main() {
    // 创建基础文本输出对象
    TextOutput* textOutput = new TextOutput();

    // 创建装饰器并嵌套组合
    TextDecorator* boldDecorator = new BoldDecorator(textOutput);
    TextDecorator* italicDecorator = new ItalicDecorator(boldDecorator);

    // 输出文本
    italicDecorator->write("Hello, World!");

    // 释放内存
    delete italicDecorator;
    delete boldDecorator;
    delete textOutput;

    return 0;
}
相关推荐
星月IWJ2 小时前
领域驱动设计学习
java·学习·设计模式
_dindong3 小时前
Linux网络编程:Reactor反应堆模式
linux·服务器·网络·设计模式·php
雨中飘荡的记忆3 小时前
Step Builder模式实战
java·设计模式
Eren7Y琳4 小时前
开箱即用构建应用环境:openEuler易获得性深度验证
redis·设计模式·架构
Unstoppable224 小时前
八股训练营第 39 天 | Bean 的作用域?Bean 的生命周期?Spring 循环依赖是怎么解决的?Spring 中用到了那些设计模式?
java·spring·设计模式
闲人编程5 小时前
微服务API网关设计模式
python·缓存·微服务·设计模式·系统安全·api·codecapsule
__万波__5 小时前
二十三种设计模式(八)--装饰器模式
java·设计模式·装饰器模式
@小白鸽5 小时前
1.2.2结构型设计模式
设计模式
繁华似锦respect16 小时前
C++ 智能指针底层实现深度解析
linux·开发语言·c++·设计模式·代理模式
繁华似锦respect1 天前
单例模式出现多个单例怎么确定初始化顺序?
java·开发语言·c++·单例模式·设计模式·哈希算法·散列表