类写的不够规范,目的是为了缩短篇幅,实际中请不要这样做。 

1、概述

  想象一下修房子。当施工队把房子框架结构做好了,墙刷上了水泥, 这时,工队暂时没有钱,装修只能暂停了。 过了一段时间,工队筹集了资金,继续装修,最后交给用户。

  这个过程中, 就和 装饰器模式 很接近。 工队前期,做好了房屋结构框架,刷上了水泥, 好比现有的类,这时,需要对其进行扩展,就好比房屋的后期装修。装饰器模式就和这个道理是一样的。

  下面示例

2、房屋基类

// 房子基类
class house
{
public:
virtual void get_info() = 0;
};

3、毛坯房刷上了水泥

// 拿到毛坯房,都是水泥墙,还没有装修
class house_my : public house
{
public:
// 毛坯房拿到了,输出基本信息
void get_info()
{
cout << "毛坯房拿到了,都是水泥墙,还没有装修\n";
}
};

4、工队筹集了资金,准备i装修,装修时建立在现有的水泥房之上

// 定义一个抽象的装修类,目的是为了保留现有对象的接口和属性
class house_decorator : public house
{
public: // 初始化原有对象
void init(house *pinstance)
{
if (nullptr != pinstance)
_phouse = pinstance;
} // 为了输出原始对象的接口
void get_info()
{
if (_phouse)
_phouse->get_info();
} private:
// 保存原始接口
house *_phouse = nullptr;
};

5、装修计划已经做好,下面开始装修

// 现在开始装修了,当然是基于原始的毛坯房
class house_decorator_my : public house_decorator
{
public:
// 装修是建立在毛坯房的基础上
void init2(house *pinstance)
{
if (nullptr != pinstance)
init(pinstance);
} // 厨房装修好了
void get_kitchen_info()
{
cout << "\n 厨房装修好了\n";
} void get_drawing_room_info()
{
cout << "\n 客厅装修好了 \n";
}
};

6、房屋装修好了,来看看结果:(装饰器类调用)

// 尝试调用房子装修结果
void call_house_mode()
{
// 1、先拿到毛坯房
std::unique_ptr<house> phouse(new(std::nothrow) house_my);
if (!phouse)
{
cout << "\n 毛坯房 还没有修好\n";
return;
} // 2、 输出毛坯房信息
cout << "\n 毛坯房结果:";
phouse->get_info(); // 3、 创建装修工具
std::unique_ptr<house_decorator_my> phouse_decorator_my(new(std::nothrow) house_decorator_my); if (!phouse_decorator_my)
{
cout << "\n 房子还没装修好,再等等 \n";
return;
} cout << "\n \n\n\n 毛坯房装修完了,结果:\n"; // 初始化毛坯房
phouse_decorator_my->init(phouse.get()); // 看看装修结果
phouse_decorator_my->get_info();
phouse_decorator_my->get_drawing_room_info();
phouse_decorator_my->get_kitchen_info();
}

7、输出

c++设计模式概述之装饰器的更多相关文章

  1. python设计模式之内置装饰器使用(四)

    前言 python内部有许多内建装饰器,它们都有特别的功能,下面对其归纳一下. 系列文章 python设计模式之单例模式(一) python设计模式之常用创建模式总结(二) python设计模式之装饰 ...

  2. 设计模式学习心得<装饰器模式 Decorator>

    装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰类,用来包装 ...

  3. Java设计模式12:装饰器模式

    装饰器模式 装饰器模式又称为包装(Wrapper)模式.装饰器模式以多客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 装饰器模式的结构 通常给对象添加功能,要么直接修改对象添加相应的功能, ...

  4. 设计模式のDecoratorPattern(装饰器模式)----结构模式

    一.产生背景 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装 ...

  5. 重学 Java 设计模式:实战装饰器模式(SSO单点登录功能扩展,增加拦截用户访问方法范围场景)

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 对于代码你有编程感觉吗 很多人写代码往往是没有编程感觉的,也就是除了可以把功能按照固 ...

  6. 设计模式入门之装饰器模式Decorator

    //装饰模式定义:动态地给一个对象加入一些额外的职责. //就添加功能来说.装饰模式比生成子类更为灵活 //这也提现了面向对象设计中的一条基本原则,即:尽量使用对象组合,而不是对象继承 //Compo ...

  7. Java设计模式系列-装饰器模式

    原创文章,转载请标注出处:<Java设计模式系列-装饰器模式> 一.概述 装饰器模式作用是针对目标方法进行增强,提供新的功能或者额外的功能. 不同于适配器模式和桥接模式,装饰器模式涉及的是 ...

  8. 面向对象程序设计(OOP设计模式)-结构型模式之装饰器模式的应用与实现

    课程名称:程序设计方法学 实验4:OOP设计模式-结构型模式的应用与实现 时间:2015年11月18日星期三,第3.4节 地点:理1#208 一.实验目的 加深对结构型设计模式的理解以及在开发中的实际 ...

  9. python设计模式之装饰器详解(三)

    python的装饰器使用是python语言一个非常重要的部分,装饰器是程序设计模式中装饰模式的具体化,python提供了特殊的语法糖可以非常方便的实现装饰模式. 系列文章 python设计模式之单例模 ...

随机推荐

  1. 【GS应用】基因组选择在杂交玉米上的应用示例

    目录 GS两步走 示例 缩短周期和成本 分类 杂交类型 试验研究 选择响应 选择的强度 选择的周期 预测能力 数据分析的注意事项 GS实施 优缺点 GS的成功 展望 GS两步走 示例 缩短周期和成本 ...

  2. [linux] 大批量删除任务

    一不小心投了巨多任务,或者投递的资源不合理时,想批量杀掉这些任务. kill的方法就不说了,我这里用qdel的方法. 用了这么一条命令: qstat |sed '1,2d' |awk -F' ' '{ ...

  3. 混合(Pooling)样本测序研究

    目录 1.混合测序基础 2. 点突变检测 3. BSA 4. BSR 5. 混合样本GWAS分析 6. 混合样本驯化研究 7. 小结 1.混合测序基础 测序成本虽然下降了,但对于植物育种应用研究来说还 ...

  4. Go 命令类型和未命名类型

    Go 命令类型和未命名类型 例子 package main import "fmt" // 使用type声明的是命令类型 // type new_type old_type typ ...

  5. C 语言do while 循环

    do while 循环小练习 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int main(void) 5 { 6 int a ...

  6. 用UIScrollview做一个网易scrollviewbar

    效果如上,点击出现的图片是用UIImageview添加上的,比较简陋 我用了两种方法,第一种是直接在viewcontroller里面写代码 第二种是用了一个类来封装这个scrollviewbar 对外 ...

  7. Java_zip_多源文件压缩到指定目录下

    依赖: <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-compress --> <depend ...

  8. git 使用https方式进行 pull、push代码免密

    由于网络原因我用ssh方法拉取代码每次都提示远程服务连接失败,因此我用了https方式去拉去代码. 这种方式拉取代码每次操作都要输入密码,为了解决这个问题做了一下操作: 在命令行输入 git conf ...

  9. py脚本 获取当前运行服务的相关信息

    一.简介 最近在统计系统中都部署了什么服务,但服务器太多,在没有标准化之前进行整理,还是写脚本收集方便一些. 当然还是需要人工去判断整理表格,为后面标准化做准备.脚本是python2.7的,默认的ce ...

  10. Python pyecharts绘制柱状图

    本文摘抄至https://05x-docs.pyecharts.org/#/zh-cn/charts_base?id=bar%ef%bc%88%e6%9f%b1%e7%8a%b6%e5%9b%be%e ...