当前位置: 首页 > news >正文

给女友做的网站 源码广州大型网站建设

给女友做的网站 源码,广州大型网站建设,wordpress 教学视频,网站内链检查深入解析装饰者模式#xff1a;动态扩展功能的艺术#xff08;C实现#xff09; 一、模式思想与应用场景 1.1 模式定义 装饰者模式#xff08;Decorator Pattern#xff09;是一种结构型设计模式#xff0c;它通过将对象放入包含行为的特殊封装对象中#xff0c;动态地…深入解析装饰者模式动态扩展功能的艺术C实现 一、模式思想与应用场景 1.1 模式定义 装饰者模式Decorator Pattern是一种结构型设计模式它通过将对象放入包含行为的特殊封装对象中动态地为原始对象添加新功能比继承更灵活。 1.2 核心优势 动态添加功能运行时修改对象行为避免类爆炸替代多层次的继承结构遵循开闭原则扩展开放修改关闭 1.3 典型应用场景 需要动态/透明地给对象添加职责需要撤销已添加的功能不适合使用子类扩展的情况常见应用 GUI组件装饰流处理如Java I/O游戏角色装备系统咖啡订单系统本文示例 二、模式结构与C实现 2.1 UML类图解析 2.2 咖啡订单系统实现 基础组件接口 #include iostream #include memory #include string // 抽象组件 class Beverage { public:virtual ~Beverage() default;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;} }; 装饰器基类 #include component.h // 抽象装饰器 class CondimentDecorator : public Beverage { public:explicit CondimentDecorator(std::unique_ptrBeverage beverage) : beverage_(std::move(beverage)) {}std::string getDescription() const override {return beverage_-getDescription();}double cost() const override {return beverage_-cost();}protected:std::unique_ptrBeverage beverage_; };具体装饰器实现 #include decorator_abstract.h// 牛奶装饰器 class Milk : public CondimentDecorator { public:using CondimentDecorator::CondimentDecorator;std::string getDescription() const override {return beverage_-getDescription() , Milk;}double cost() const override {return beverage_-cost() 0.45;} };// 摩卡装饰器 class Mocha : public CondimentDecorator { public:using CondimentDecorator::CondimentDecorator;std::string getDescription() const override {return beverage_-getDescription() , Mocha;}double cost() const override {return beverage_-cost() 0.60;} };三、客户端使用示例 3.1 基础使用 #include iostream #include memory #include string #include decorator_entity.hint main() {// 创建基础咖啡std::unique_ptrBeverage coffee std::make_uniqueEspresso();// 第一次装饰加牛奶coffee std::make_uniqueMilk(std::move(coffee));// 第二次装饰加摩卡coffee std::make_uniqueMocha(std::move(coffee));// 输出结果std::cout Order: coffee-getDescription() \n Total Cost: $ coffee-cost() std::endl;return 0; } 3.2 输出结果 Order: Espresso, Milk, Mocha Total Cost: $3.04四、模式深度解析 4.1 设计亮点 动态组合通过嵌套装饰实现功能叠加透明性装饰器与组件接口一致弹性扩展新装饰器不影响现有代码智能指针管理自动内存管理 4.2 与传统继承对比 特性继承方案装饰者模式扩展方式编译时静态扩展运行时动态组合类数量指数级增长组合爆炸线性增长功能叠加固定组合任意顺序组合维护成本修改基类影响所有子类独立扩展互不影响 4.3 实现注意事项 接口一致性装饰器必须完全实现组件接口装饰顺序不同装饰顺序可能影响最终结果内存管理 使用unique_ptr自动管理生命周期禁止拷贝操作示例中已隐式实现 性能考量多层嵌套可能影响性能 五、进阶实现技巧 5.1 装饰器撤销功能 // 移除装饰器类 template typename T class RemovableDecorator : public CondimentDecorator { public:using CondimentDecorator::CondimentDecorator;// 移除特定类型的装饰std::unique_ptrBeverage removeDecorator() {if (auto dec dynamic_castT*(beverage_.get())) {return std::move(dec-beverage_);}return std::move(beverage_);}std::string getDescription() const override {return beverage_-getDescription();}double cost() const override {return beverage_-cost();} }; 5.2 复合装饰器 // 复合装饰器 - 两倍装饰 将所选饮料配料翻倍 class DoubleDecorator : public CondimentDecorator { public:using CondimentDecorator::CondimentDecorator;std::string getDescription() const override {return beverage_-getDescription() x2;}double cost() const override {return beverage_-cost() * 2;} }; 5.3 调用方法 #include iostream #include memory #include string #include decorator_entity.hint main() {// 创建基础咖啡std::unique_ptrBeverage coffee std::make_uniqueEspresso();// 第一次装饰加牛奶coffee std::make_uniqueMilk(std::move(coffee));// 第二次装饰加摩卡coffee std::make_uniqueMocha(std::move(coffee));// 输出结果std::cout Order: coffee-getDescription() \n Total Cost: $ coffee-cost() std::endl;// 使用示例auto rmver std::make_uniqueRemovableDecoratorMocha(std::move(coffee));coffee rmver-removeDecorator();// 输出结果std::cout Order: coffee-getDescription() \n Total Cost after remove Mocha: $ coffee-cost() std::endl;coffee std::make_uniqueDoubleDecorator(std::move(coffee));std::cout Order: coffee-getDescription() \n Total Cost after double order: $ coffee-cost() std::endl;return 0; } 5.4 执行结果 Order: Espresso, Milk, Mocha // 初始点单 Total Cost: $3.04 Order: Espresso, Milk // 移除Mocha Total Cost after remove Mocha: $2.44 Order: Espresso, Milk x2 // 复合装饰器double order Total Cost after double order: $4.88 六、模式应用扩展 6.1 实际工程案例 图形界面组件 滚动条装饰文本框边框装饰图片组件 网络通信 加密装饰数据流压缩装饰传输流 游戏开发 装备系统增强角色属性技能BUFF叠加效果 6.2 相关模式对比 模式核心区别适配器模式改变对象接口代理模式控制访问不添加功能组合模式统一处理对象集合策略模式整体替换算法 七、最佳实践指南 7.1 适用场景判断 ✅ 推荐使用 需要动态添加/撤销功能使用继承会导致类爆炸不同功能的排列组合场景 ❌ 避免使用 需要直接访问具体组件方法装饰顺序影响业务逻辑性能敏感的底层系统 7.2 实现原则 优先组合使用对象组合而非继承保持轻量装饰器不应包含复杂逻辑接口隔离定义明确的组件接口文档规范明确装饰器的叠加规则 八、总结 装饰者模式通过灵活的对象组合代替僵化的类继承为系统扩展提供了优雅的解决方案。在C实现中 使用unique_ptr管理组件生命周期通过抽象类保证接口一致性利用现代C特性简化实现 当面对需要动态扩展功能的场景时装饰者模式就像编程世界的俄罗斯套娃让每个装饰器层层包裹核心组件最终组合出强大的功能集合。
http://www.w-s-a.com/news/513264/

相关文章:

  • 网站建设设计方案动漫制作专业学校
  • 吴江区建设用地申报网站包装设计模板设计素材
  • 快速建站的公司wordpress 元数据定义
  • 网站seo分析工具网站标题用空格 逗号影响seo
  • 基金项目实验室信息网站建设wordpress文章新窗口打开
  • php网站开发就业前景做网站推荐源创网络
  • wordpress 8211西安网站优化维护
  • 泰安招聘网站有哪些wordpress 回复提醒
  • 网站服务器不稳定怎么打开网页企业营销策划心得体会
  • 自己做视频网站会不会追究版权企业商城网站建设方案
  • 烟台网站制作计划网站做seo的好处
  • 网站首页轮播官方网站下载拼多多
  • 罗庄区建设局网站自己做网站推广产品
  • 优秀flash网站欣赏苏州吴中区建设局网站
  • 网站添加wordpress博客网上商城购物系统论文
  • 上海市建设安全协会网站王夑晟企业网站建设需要做些什么
  • 网站app 开发辽宁建设工程信息网官网新网站是哪个
  • 厦门建设企业网站建设wordpress添加形式
  • 建立什么网站可以赚钱室内设计效果图qq群
  • 厦门网站设计大概多少钱服务公司沈傲芳
  • 如何起手做网站项目百度站长app
  • dede 购物网站wordpress主题超限
  • 做啊录音网站WordPress音乐悬浮插件
  • 安徽建设厅证书查询网网站网站策划与运营课程认知
  • wordpress证书关闭重庆seo优化效果好
  • 直播网站建设模板网站活动怎么做的
  • 医院网站建设网站网站开发工资高嘛
  • 个人网站备案内容写什么做网站是不是涉及很多语言职
  • 怎么用手机做一个网站门户网站建设工作的自查报告
  • 网站搭建怎么收费浙江建设集团网站