装饰模式:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类 更为灵活。有时我们希望给某个对象而不是整个类添加一些功能。比如有一个手机,允许你为手机添加特性,比如增加挂件、屏幕贴膜等。一种灵活的设计方式是, 将手机嵌入到另一对象中,由这个对象完成特性的添加,我们称这个嵌入的对象为装饰。这个装饰与它所装饰的组件接口一致,因此它对使用该组件的客户透明。

#include <iostream>
#include <string> using namespace std; class Phone
{
public:
Phone() {}
virtual ~Phone() {}
virtual void ShowDecorate() {}
}; class iPhone:public Phone
{
private:
string m_name;
public:
iPhone(string name):m_name(name){}
~iPhone() {}
void ShowDecorate()
{
cout << m_name << "的装饰" <<endl;
}
}; class AndroidPhone : public Phone
{
private:
string m_name;
public:
AndroidPhone(string name):m_name(name){}
~AndroidPhone() {}
void ShowDecorate()
{
cout << m_name << "的装饰" <<endl;
}
}; class DecoratorPhone : public Phone
{
private:
Phone *m_phone;
public:
DecoratorPhone(Phone *phone):m_phone(phone) {}
virtual void ShowDecorate()
{
m_phone->ShowDecorate();
}
}; class DecoratorPhoneA:public DecoratorPhone
{
public:
DecoratorPhoneA(Phone *phone) : DecoratorPhone(phone) {}
void ShowDecorate()
{
DecoratorPhone::ShowDecorate();
AddDecorate();
}
private:
void AddDecorate()
{
cout << "增加挂件" << endl;
}
}; int main()
{
Phone *dpa = new DecoratorPhoneA(new iPhone("5s"));
dpa->ShowDecorate();
delete dpa; Phone *dpb = new DecoratorPhoneA(new AndroidPhone("Mi2s"));
dpb->ShowDecorate(); system("pause");
return ;
}

输出结果:

5s的装饰
增加挂件
Mi2s的装饰
增加挂件
请按任意键继续. . .

c++ 装饰模式(decorate)的更多相关文章

  1. 设计模式--装饰模式Decorate(结构型)

    一.装饰模式 动态地给一个对象添加额外的职责.就增加功能来说,装饰模式相比生成子类更为灵活.有时我们希望给某个对象而不是整个类添加一些功能. 二.UML图 1.Component(概念中提到的对象接口 ...

  2. java.io包下适配和装饰模式的使用

    如java.io.LineNumberInputStream(deprecated),是装饰模式(decorate)的实现: 如java.io.OutputStreamWriter,是适配器模式(ad ...

  3. Java 装饰器模式详解

    转载请注明出处:http://blog.csdn.net/zhaoyanjun6/article/details/56488020 前言 在上面的几篇文章中,着重介绍了Java 中常见的 IO 相关知 ...

  4. 装饰模式(Decorate Pattern)

    在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象. (1) 装饰对象和真实对象有相同的接口.这样客户端对象就能以和真实对象相同的方式 ...

  5. decorate装饰模式

    package com.decorate; public class Iphone implements Phone{ @Override public void call() { System.ou ...

  6. decorate pattern 装饰模式

    [装饰模式的优缺点]装饰模式的优点:1.比静态继承更灵活:2.避免在层次结构高层的类有太多的特征装饰模式的缺点:1.使用装饰模式会产生比使用继承关系更多的对象.并且这些对象看上去都很想像,从而使得查错 ...

  7. 设计模式:装饰模式(decorate)

    还是那几句话: 学无止境,精益求精 十年河东,十年河西,莫欺少年穷 学历代表你的过去,能力代表你的现在,学习代表你的将来 废话不多说,直接进入正题: 今天学习了装饰模式,但是代码看不太懂,于是我将装饰 ...

  8. Decorate Pattern 装饰者模式

    装饰模式的定义: 动态地将责任附加到对象向,若要扩展功能,装饰模式提供了比继承更有弹性的替代方案. 遵循的设计原则是开闭原则,也是对扩展开放,对修改关闭. 下面是类图 示例代码 /** *定义被装饰者 ...

  9. javascript模式 (3)——工厂模式和装饰模式

    上节我们讲解了单例模式,这节我们将继续讲解工厂模式和迭代器模式 工厂模式: 工厂模式的目的是为了方便的创建对象(可以在不知道构造的情况下),通过静态方法来实现,在java或c#等静态编译语言中需要通过 ...

随机推荐

  1. 【英语】Bingo口语笔记(83) - hell系列

  2. LeetCode Minimum Time Difference

    原题链接在这里:https://leetcode.com/problems/minimum-time-difference/description/ 题目: Given a list of 24-ho ...

  3. SQL语句优化方法30例

    1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化. 例如: SELECT /*+ALL+_ROWS*/ EMP_NO,EMP_NAM,DAT_I ...

  4. win7 安装过程中遇到的错误解决方法

    win7 安装过程中遇到的错误解决方法 windows安装无法继续.若要安装windows 请单击 确定 重新启动计算机: 当 出现如上提示的时候,按下shift+f10 会打开命令窗口,进入到C:\ ...

  5. gen_fsm的学习笔记

    网上搜索gen_fsm的例子,90%都是code_lock,依葫芦画瓢弄了下,记录一些学习心得 init(UnLockCode) -> process_flag(trap_exit,true), ...

  6. mac book 华为C8815不能debug

    最近遇到一个头疼的问题,华为c8815机器,死活不能在mac下debug,虽然最终是能够debug了,但是走了很多弯路. (1)以为是mac的系统问题,所以重装了系统.为了重装系统,备份资料,用快盘上 ...

  7. 文化之旅(dijstra)

    2012_p4 文化之旅 (culture.cpp/c/pas) 时间限制: 1 Sec  内存限制: 128 MB提交: 43  解决: 16[提交][状态][讨论版][命题人:外部导入] 题目描述 ...

  8. php代码中临时开启错误调试

    对php.ini 中参数的设置 也可用在php代码中完成. 调用:调用ini_set()函数 //开启php.ini中的display_errors指令 ini_set('display_errors ...

  9. 如何成为java架构师(转载)

    链接:https://www.zhihu.com/question/29031276/answer/54631312 来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 1 ...

  10. Deep Learning 学习笔记(2):多参数的线性回归

    上次用简单地介绍了线性回归的模型和梯度下降获得参数方程的方法. 用到的一个十分简单的参数方程h(x)=theta0+theta1*x 在现实问题中,参数方程能要复杂许多, 不只有一个未知量x,可能有多 ...