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

《装饰器模式(极简c++)》

         本文章属于专栏- 概述 - 《设计模式(极简c++版)》-CSDN博客


模式说明

  • 方案: 装饰类和派生类同根,然后装饰类中放一个派生类,以在接口不动的情况下增加功能
  • 优点: 可以灵活地扩展对象功能,相比继承更易读。
  • 缺点: 增加了许多小对象,易于出错,不易调试。

本质思想: 派生类和装饰类都继承Base,然后装饰器类中放一个Base指针,存派生类。这样装饰器类和派生类可以放一个数组中,调用相同接口,这样部分类的功能看起来像被装饰了。前面是核心思想,基于这个再扩展,很容易基于装饰器加装饰器,或者把有相似接口的装饰器抽象出一个装饰器基类。

实践建议

  • 注意组合关系,确保装饰器和被装饰对象之间的接口一致。
  • 装饰器的功能应该是可组合的,可叠加的。

代码示例

#include <iostream>// Component Interface
class Bird {
public:virtual void fly() const = 0;
};// Concrete Component
class Sparrow : public Bird {
public:void fly() const override {std::cout << "Sparrow is flying." << std::endl;}
};// Concrete Decorator
class RedFeatherDecorator : public Bird {
private:Bird *bird;public:explicit RedFeatherDecorator(Bird *b) : bird(b) {}void fly() const override {bird->fly();std::cout << "With red feathers." << std::endl;}
};int main() {Bird *sparrow = new Sparrow();Bird *redSparrow = new RedFeatherDecorator(sparrow);redSparrow->fly();/* 
输出:Sparrow is flying.With red feathers.
*/delete sparrow;delete redSparrow;return 0;
}

http://www.lryc.cn/news/328232.html

相关文章:

  • Spring Boot 整合分布式搜索引擎 Elastic Search 实现 自动补全功能
  • 实现一个Google身份验证代替短信验证
  • Spring框架与Spring Boot的区别和联系
  • [OpenCV学习笔记]Qt+OpenCV实现图像灰度反转、对数变换和伽马变换
  • 【大数据】Flink学习笔记
  • 社交网络的未来:Facebook如何塑造数字社交的下一章
  • RabbitMQ 延时消息实现
  • 【Django】枚举类型数据
  • java实现https连接总是要报no cipher suites in common
  • [C++初阶] 爱上C++ : 与C++的第一次约会
  • STM32技术打造:智能考勤打卡系统 | 刷卡式上下班签到自动化解决方案
  • module ‘numpy‘ has no attribute ‘int‘
  • MFC(一)搭建空项目
  • OKCC的API资源管理平台怎么用?
  • CentOS 7 安装python 3.7 需要必要的依赖。
  • 美术馆设计方案优化布局与设施提升观众体验!
  • 数据库基础原理
  • Pandas操作MultiIndex合并行列的Excel,写入读取以及写入多余行及Index列处理,插入行,修改某个单元格的值,多字段排序
  • 工作总结5
  • 速通汇编(二)汇编mov、addsub指令
  • 软考 - 系统架构设计师 - 构件组装技术
  • 2010年之前电脑ubuntu安装nvidia驱动黑屏处理
  • 类与对象中C++
  • k8s 集群重启报错:The connection to the server 192.168.92.26:6443 was refused
  • 国内好用的chatGPT和AI绘图工具
  • 蚂蚁庄园3.31今日答案春季美食“雷竹笋”之所以得名是因为出笋与打雷有关吗?
  • 零基础入门转录组数据分析——绘制差异火山图
  • C++进阶,手把手带你学继承
  • Java自带的线程池及调用、ThreadPoolExecutor类(线程池的7大参数)、任务队列及底层原理
  • ThreadPool-线程池使用及原理