您的位置:首页 > 新闻 > 资讯 > 福田做网站公司怎么选择_公司网站的开发策略_官网设计比较好看的网站_超级外链吧外链代发

福田做网站公司怎么选择_公司网站的开发策略_官网设计比较好看的网站_超级外链吧外链代发

2025/2/24 23:28:00 来源:https://blog.csdn.net/weixin_42577742/article/details/145708250  浏览:    关键词:福田做网站公司怎么选择_公司网站的开发策略_官网设计比较好看的网站_超级外链吧外链代发
福田做网站公司怎么选择_公司网站的开发策略_官网设计比较好看的网站_超级外链吧外链代发

模式定义

装饰器模式(Decorator Pattern)是一种结构型设计模式,允许动态地为对象添加新功能,而无需修改其结构。它通过将对象包装在装饰器类的实例中,实现功能的灵活扩展,符合开放/封闭原则。


模式结构

抽象组件(Component):定义核心功能的接口(如数控系统的数据采集接口)。
具体组件(ConcreteComponent):实现基础功能(如基础传感器数据采集)。
抽象装饰器(Decorator):继承自Component,并持有其引用,用于扩展功能。
具体装饰器(ConcreteDecorator):实现具体的扩展功能(如日志记录、数据校验)。


适用场景

动态扩展对象功能,避免继承导致的类爆炸(如数控系统中逐步添加日志、校验等模块)。
需要透明地增强对象功能,且不影响原有代码。


C++示例(数控系统场景)

场景说明:
数控系统需要动态扩展数据采集功能,例如在基础采集功能上添加日志记录和数据校验。

#include 
#include // 抽象组件:数据采集接口
class DataCollector {
public:virtual ~DataCollector() = default;virtual std::string collectData() = 0;
};// 具体组件:基础传感器数据采集
class SensorCollector : public DataCollector {
public:std::string collectData() override {return "传感器数据: 温度=75°C, 压力=100kPa";}
};// 抽象装饰器
class DataCollectorDecorator : public DataCollector {
protected:std::unique_ptr collector;  // 持有组件对象
public:DataCollectorDecorator(std::unique_ptr c) : collector(std::move(c)) {}std::string collectData() override {return collector->collectData();}
};// 具体装饰器1:添加日志记录
class LoggingDecorator : public DataCollectorDecorator {
public:using DataCollectorDecorator::DataCollectorDecorator;std::string collectData() override {std::string data = collector->collectData();std::cout << "[日志] 采集数据: " << data << std::endl;return data;}
};// 具体装饰器2:添加数据校验
class ValidationDecorator : public DataCollectorDecorator {
public:using DataCollectorDecorator::DataCollectorDecorator;std::string collectData() override {std::string data = collector->collectData();if (data.empty()) throw std::runtime_error("数据校验失败: 空数据");return "[校验通过] " + data;}
};// 客户端(数控系统)
int main() {// 基础采集功能auto baseCollector = std::make_unique();// 动态添加日志和校验功能auto decoratedCollector = std::make_unique(std::make_unique(std::move(baseCollector)));// 使用装饰后的采集器std::cout << decoratedCollector->collectData() << std::endl;return 0;
}

代码说明
抽象组件:DataCollector定义了数据采集接口collectData()
具体组件:SensorCollector实现基础数据采集逻辑。
抽象装饰器:DataCollectorDecorator继承组件接口并持有其对象,为扩展功能提供基础。
具体装饰器:

  • LoggingDecorator在采集后添加日志记录。
  • ValidationDecorator对数据进行校验。

输出结果:

[日志] 采集数据: 传感器数据: 温度=75°C, 压力=100kPa  
[校验通过] 传感器数据: 温度=75°C, 压力=100kPa

优势与扩展性

灵活扩展:可自由组合装饰器(如先记录日志再校验),无需修改原有类。
符合开闭原则:新增功能通过装饰器实现,避免修改已有代码。
数控系统应用:可扩展更多装饰器(如数据加密、格式转换),满足复杂需求。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com