#pragma once#ifndef DECORATOR_H #define DECORATOR_H // 抽象基类,定义一个对象接口,可以为这个接口动态的添加职责.
class Component
{
public: Component(){} virtual ~Component(){} // 纯虚函数,由派生类实现 virtual void Operation() = 0;
}; // 抽象基类,维护一个指向Component对象的指针
class Decorator : public Component
{
public: Decorator(Component* pComponent) : m_pComponent(pComponent){} virtual ~Decorator(); protected: Component* m_pComponent;
}; // 派生自Component,在这里表示需要给它动态添加职责的类
class ConcreateComponent : public Component
{
public: ConcreateComponent(){} virtual ~ConcreateComponent(){} virtual void Operation();
}; // 派生自Decorator,这里代表为ConcreateComponent动态添加职责的类
class ConcreateDecorator : public Decorator
{
public: ConcreateDecorator(Component* pComponent) : Decorator(pComponent){} virtual ~ConcreateDecorator(){} virtual void Operation(); private: void AddedBehavior();
}; #endif 
#include "StdAfx.h"
#include "decorator_impl.h"#include <iostream> Decorator::~Decorator()
{ delete m_pComponent; m_pComponent = NULL;
} void ConcreateComponent::Operation()
{ std::cout << "Operation of ConcreateComponent\n";
} void ConcreateDecorator::Operation()
{ m_pComponent->Operation(); //componet原有职责AddedBehavior(); //decorator动态添加职责
} void ConcreateDecorator::AddedBehavior()
{ std::cout << "AddedBehavior of ConcreateDecorator\n";
} 
// Decorator.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"
#include <stdlib.h>
#include <iostream>#include "decorator_impl.h"using namespace std;
//动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活
int _tmain(int argc, _TCHAR* argv[])
{// 初始化一个Component对象 Component* pComponent = new ConcreateComponent(); // 采用这个Component对象去初始化一个Decorator对象, cout<<"before decorator"<<endl;pComponent->Operation();cout<<endl;// 这样就可以为这个Component 对象动态添加职责 Decorator* pDecorator = new ConcreateDecorator(pComponent); //Component* pDecorator = new ConcreateDecorator(pComponent); cout<<"after decorator"<<endl;//对外表现为执行了component基本职责,并执行了decorator动态添加的职责pDecorator->Operation(); delete pDecorator; system("pause"); return 0;
}

设计模式-结构型-装饰相关推荐

  1. 设计模式 - 结构型 - 装饰者模式

    2019独角兽企业重金招聘Python工程师标准>>> 介绍 意图:动态地给一个对象添加一些额外的职责.就增加功能来说,装饰器模式相比继承更为灵活. 主要解决:一般的,我们为了扩展一 ...

  2. 设计模式-结构型模式-装饰模式

    设计模式-结构型模式-装饰模式 栗子 以成绩单需要家长签字为要求. 成绩单类图 // 抽象成绩单 public abstract class SchoolReport{// 成绩单你的成绩情况publ ...

  3. 4.C++设计模式-结构型模型

    4.C++设计模式-结构型模型 让类和类进行组合,获得更大的结构. 4.1 代理模式 4.1.1 代理模式的理论 代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不 ...

  4. 23种设计模式——结构型设计模式(7种)

    目录 ☞ 23 种设计模式--创建型设计模式(5种) ☞ 23 种设计模式--结构型设计模式(7种) ☞ 23 种设计模式--行为型设计模式(11种) 3. 结构型设计模式 结构型模式描述如何将类或对 ...

  5. 设计模式 - 结构型

    结构型设计模式 结构型模式(Structural Pattern)关注类和对象的组合.其描述如何将类或者对象结合在一起形成更大的结构,就像搭积木,可以通过简单积木的组合形成复杂的.功能更为强大的结构. ...

  6. 设计模式-结构型模式篇

    设计模式 目录: 一.代理模式 二.适配器模式 三.装饰者模式 四.桥接模式 五.外观模式 六.组合模式 七.享元模式 注:学习视频:黑马程序员Java设计模式 结构型模式 结构性模式描述如何将类或对 ...

  7. 设计模式(结构型)之享元模式(Flyweight Pattern)

    PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbob ...

  8. 设计模式(结构型)之代理模式(Proxy Pattern)

    PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbob ...

  9. 设计模式-结构型模式讲解下(装饰者、外观、代理)

    一.结构型设计模式 上篇,我们讲解了结构型设计模式的适配器.桥接.组合.享元模式. 文章地址:https://blog.csdn.net/qq_43692950/article/details/120 ...

最新文章

  1. VMware vCenter Converter Standlone迁移手册
  2. 如何更快的发现新APP,不会错过新的趋势
  3. pmp每日三题(2022年3月1日)
  4. JavaOne 2015 –提交的技巧和建议
  5. system函数的返回值和执行脚本的返回值
  6. 任正非:华为欲出售5G技术制造竞争对手
  7. 在如今的Web前端环境下,如何提升自己的竞争力?
  8. 动态规划(Dynamic Programming)理论篇
  9. AppCompat (AppCompatActivity) Jetpack
  10. mouseover和mouseenter的区别?
  11. 川轻化c语言实验答案,C语言实验目().doc
  12. cout, endl的使用
  13. 尺寸工程分析软件-尺寸公差分析软件-尺寸链计算软件
  14. 存-管-用 联想企业网盘融云一体机让协同办公变得简单
  15. 文本预处理库spaCy的基本使用(快速入门)
  16. 计算机网络——CSMA-CA协议
  17. 兼容NVIDIA Jetson Xavier AGX/Orin的GMSL 设计与调试
  18. [附源码]java毕业设计中青年健康管理监测系统
  19. 中创算力|分布式维基百科新语言版本服务上线,IPFS助力Web3.0!
  20. MATLAB求解峰值、均值、平均幅值、方差、均方根、方根幅值、最值、峭度、斜度、裕度指标、波形指标、脉冲指标、峰值指标、峭度指标

热门文章

  1. php中怎么定义page,css @page的使用与定义详解
  2. vue 导入公共css_HTML+CSS入门 vue引入通用CSS
  3. 倒排索引(Inverted File Index )
  4. 10.递归是神马?recursion
  5. 【Tools】git操作总结
  6. 虚函数和纯虚函数的区别
  7. 图像分割之(六)交叉视觉皮质模型(ICM)
  8. 彻底理解JAVA动态代理
  9. 开发团队里是否需要测试人员?
  10. 洪小文博士写给你的新年书单