【C++】装饰模式

目录

  • 一、模式核心概念与结构
  • 二、C++ 实现示例:咖啡与配料的装饰
  • 三、装饰模式与继承的对比
  • 四、应用场景
  • 五、C++ 实现注意事项
  • 六、装饰模式与其他设计模式的关系
  • 七、实战案例:网络请求处理链
  • 八、优缺点分析
  • 九、C++ 标准库中的装饰模式应用
    • 如果这篇文章对你有所帮助,渴望获得你的一个点赞!

装饰模式(Decorator Pattern)是一种【结构型】设计模式,它允许向一个现有的对象添加新的功能,同时又不改变其结构。这种模式通过创建一个装饰器类,来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。装饰模式在不使用继承的情况下,实现了对象功能的动态扩展。

一、模式核心概念与结构

装饰模式包含四个核心角色:

  1. 抽象组件(Component):定义对象的接口,可以给这些对象动态地添加职责。
  2. 具体组件(Concrete Component):实现抽象组件接口,定义具体的对象,装饰器可以给它增加额外的职责。
  3. 抽象装饰器(Decorator):继承自抽象组件,并持有一个抽象组件的引用,用于装饰具体组件。
  4. 具体装饰器(Concrete Decorator):实现抽象装饰器的方法,在调用具体组件方法的前后,添加额外的功能。

二、C++ 实现示例:咖啡与配料的装饰

以下是一个经典的装饰模式示例,演示如何动态添加咖啡的配料:

#include 
#include 
#include 

// 抽象组件:饮料
class Beverage {
   
public:
    virtual ~Beverage() {
   }
    virtual std::string getDescription() const = 0;
    virtual double cost() const = 0;
};

// 具体组件:浓缩咖啡
class Espresso : public Beverage {
   
public:
    std::string getDescription() const override {
   
        return "Espresso";
    }
    
    double cost() const override {
   
        return 1.99;
    }
};

// 具体组件:黑咖啡
class DarkRoast : public Beverage {
   
public:
    std::string getDescription() const override {
   
        return "Dark Roast Coffee";
    }
    
    double cost() const override {
   
        return 0.99;
    }
};

// 抽象装饰器:配料
class CondimentDecorator : public Beverage {
   
protected:
    std::shared_ptr<Beverage> beverage;  // 持有被装饰对象的引用

public:
    CondimentDecorator(std::shared_ptr<Beverage> b) : beverage(b) {
   

你可能感兴趣的:(设计模式,c++,设计模式,装饰模式)