设计模式-结构型-装饰
#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;
}
设计模式-结构型-装饰相关推荐
- 设计模式 - 结构型 - 装饰者模式
2019独角兽企业重金招聘Python工程师标准>>> 介绍 意图:动态地给一个对象添加一些额外的职责.就增加功能来说,装饰器模式相比继承更为灵活. 主要解决:一般的,我们为了扩展一 ...
- 设计模式-结构型模式-装饰模式
设计模式-结构型模式-装饰模式 栗子 以成绩单需要家长签字为要求. 成绩单类图 // 抽象成绩单 public abstract class SchoolReport{// 成绩单你的成绩情况publ ...
- 4.C++设计模式-结构型模型
4.C++设计模式-结构型模型 让类和类进行组合,获得更大的结构. 4.1 代理模式 4.1.1 代理模式的理论 代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不 ...
- 23种设计模式——结构型设计模式(7种)
目录 ☞ 23 种设计模式--创建型设计模式(5种) ☞ 23 种设计模式--结构型设计模式(7种) ☞ 23 种设计模式--行为型设计模式(11种) 3. 结构型设计模式 结构型模式描述如何将类或对 ...
- 设计模式 - 结构型
结构型设计模式 结构型模式(Structural Pattern)关注类和对象的组合.其描述如何将类或者对象结合在一起形成更大的结构,就像搭积木,可以通过简单积木的组合形成复杂的.功能更为强大的结构. ...
- 设计模式-结构型模式篇
设计模式 目录: 一.代理模式 二.适配器模式 三.装饰者模式 四.桥接模式 五.外观模式 六.组合模式 七.享元模式 注:学习视频:黑马程序员Java设计模式 结构型模式 结构性模式描述如何将类或对 ...
- 设计模式(结构型)之享元模式(Flyweight Pattern)
PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbob ...
- 设计模式(结构型)之代理模式(Proxy Pattern)
PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN.因为CSDN也支持MarkDown语法了,牛逼啊! [工匠若水 http://blog.csdn.net/yanbob ...
- 设计模式-结构型模式讲解下(装饰者、外观、代理)
一.结构型设计模式 上篇,我们讲解了结构型设计模式的适配器.桥接.组合.享元模式. 文章地址:https://blog.csdn.net/qq_43692950/article/details/120 ...
最新文章
- VMware vCenter Converter Standlone迁移手册
- 如何更快的发现新APP,不会错过新的趋势
- pmp每日三题(2022年3月1日)
- JavaOne 2015 –提交的技巧和建议
- system函数的返回值和执行脚本的返回值
- 任正非:华为欲出售5G技术制造竞争对手
- 在如今的Web前端环境下,如何提升自己的竞争力?
- 动态规划(Dynamic Programming)理论篇
- AppCompat (AppCompatActivity) Jetpack
- mouseover和mouseenter的区别?
- 川轻化c语言实验答案,C语言实验目().doc
- cout, endl的使用
- 尺寸工程分析软件-尺寸公差分析软件-尺寸链计算软件
- 存-管-用 联想企业网盘融云一体机让协同办公变得简单
- 文本预处理库spaCy的基本使用(快速入门)
- 计算机网络——CSMA-CA协议
- 兼容NVIDIA Jetson Xavier AGX/Orin的GMSL 设计与调试
- [附源码]java毕业设计中青年健康管理监测系统
- 中创算力|分布式维基百科新语言版本服务上线,IPFS助力Web3.0!
- MATLAB求解峰值、均值、平均幅值、方差、均方根、方根幅值、最值、峭度、斜度、裕度指标、波形指标、脉冲指标、峰值指标、峭度指标