大话设计模式--装饰者模式 Decorator -- C++实现实例
1.装饰者模式 Decorator
动态地给一个对象添加一个额外的职责, 就添加功能来说, 装饰模式比生成子类更为灵活。
每个装饰对象的实现和如何使用这个对象分离, 每个装饰对象只关心自己的功能,不需要关心如何被添加到对象链中。
实例:
人和衣服的装饰关系。
person.h Person类
#ifndef PERSON_H
#define PERSON_H #include <string>
#include <iostream>
using namespace std; class Person
{
public:
Person();
Person(string name);
void virtual show(); private:
string name; }; #endif // PERSON_H
person.cpp
#include "person.h" Person::Person()
{
} Person::Person(string name)
{
this->name = name;
} void Person::show()
{
cout << " <-name-> " << name << endl;
}
finery.h
#ifndef FINERY_H
#define FINERY_H #include "person.h" class Finery : public Person
{
public:
Finery();
void Decorate(Person *person);
void show(); protected:
Person *person; }; #endif // FINERY_H
finery.cpp
#include "finery.h" Finery::Finery()
{
} void Finery::Decorate(Person* person)
{
this->person = person;
} void Finery::show()
{
if(person != NULL)
person->show();
}
tshirts.h 装饰者
#ifndef TSHIRTS_H
#define TSHIRTS_H #include "finery.h" class TShirts : public Finery
{
public:
TShirts();
void show();
}; #endif // TSHIRTS_H
tshirts.cpp
#include "tshirts.h" TShirts::TShirts()
{
} void TShirts::show()
{
cout << " TShirts " << endl;
Finery::show();
}
bigtrouser.h
#ifndef BIGTROUSER_H
#define BIGTROUSER_H #include "finery.h" class BigTrouser : public Finery
{
public:
BigTrouser();
void show();
}; #endif // BIGTROUSER_H
bigtrouser.cpp
#include "bigtrouser.h" BigTrouser::BigTrouser()
{
} void BigTrouser::show()
{
cout << " BigTrouser " << endl;
Finery::show();
}
main.cpp
#include <iostream>
#include "tshirts.h"
#include "bigtrouser.h"
#include "person.h" using namespace std; int main()
{
cout << "Hello World!" << endl; Person *person = new Person("kevin"); TShirts *tshirt = new TShirts();
BigTrouser *bigT = new BigTrouser(); tshirt->Decorate(person);
bigT->Decorate(tshirt);
bigT->show(); return 0;
}
大话设计模式--装饰者模式 Decorator -- C++实现实例的更多相关文章
- 浅谈设计模式--装饰者模式(Decorator Pattern)
挖了设计模式这个坑,得继续填上.继续设计模式之路.这次讨论的模式,是 装饰者模式(Decorator Pattern) 装饰者模式,有时也叫包装者(Wrapper),主要用于静态或动态地为一个特定的对 ...
- 设计模式 - 装饰者模式(Decorator Pattern) Java的IO类 用法
装饰者模式(Decorator Pattern) Java的IO类 用法 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26716 ...
- 设计模式 - 装饰者模式(Decorator Pattern) 具体解释
装饰者模式(Decorator Pattern) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26707033 装饰者 ...
- 说说设计模式~装饰器模式(Decorator)~多功能消息组件的实现
返回目录 为何要设计多功能消息组件 之前写过一篇装饰器模式的文章,感觉不够深入,这次的例子是实现项目中遇到的,所以把它拿出来,再写写,之前也写过消息组件的文章,主要采用了策略模式实现的,即每个项目可以 ...
- C#设计模式——装饰者模式(Decorator Pattern)
一.例子在软件开发中,我们往往会想要给某一类对象增加不同的功能.比如要给汽车增加ESP.天窗或者定速巡航.如果利用继承来实现,就需要定义无数的类,Car,ESPCar,CCSCar,SunRoofCa ...
- 说说设计模式~装饰器模式(Decorator)
返回目录 装饰器模式,也叫又叫装饰者模式,顾名思义,将一个对象进行包裹,包装,让它变成一个比较满意的对象,这种模式在我们平时项目开发中,经常会用到,事实上,它是处理问题的一种技巧,也很好的扩展了程序, ...
- 大话设计模式--享元模式 Flyweight -- C++实现实例
1. 享元模式: 运用共享技术有效地支持大量细粒度的对象. 享元模式可以避免大量非常相似类的开销,在程序设计中,有时需要生成大量颗粒度的类实例来表示数据,如果能发现这些实例除了几个参数外基本都是相同的 ...
- 大话设计模式--中介者模式 Mediator --C++实现实例
1. 中介者模式: 用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立改变他们之间的交互. Mediator的出现减少了各个Colleague的耦 ...
- 【设计模式】Java设计模式 - 装饰者模式
Java设计模式 - 装饰者模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 原创作品,更多关注我CSDN: 一个有梦有戏的人 准备将博客园.CSDN一起记录分享自 ...
随机推荐
- php优化(php.ini)
PHP优化 ------------------------------------- 尽量选择php5.4及以上的版本,里面很多优化参数已经移除了相比以前版本 1.引擎解析优化和加速 1)eac ...
- Xcode wifi连接真机调试
设备环境:Mac OSX 10.12.5.iOS11.Xcode9 或以上版本 PS:这是WWDC2017的新功能,iOS11以上,Xcode9这是刚性要求.这个功能不好找,就记下来了 手机连接上Xc ...
- 使用SpannableString实现一个load小动画
依然是github开源项目:WaitingDots 这个项目代码不多,实现的非常easy.可是非常有意思由于动画的基本元素不是画出来的,而是使用了spannableString来实现. DotsTex ...
- NHibernate二级缓存(第十一篇)
NHibernate二级缓存(第十一篇) 一.NHibernate二级缓存简介 NHibernate由ISessionFactory创建,可以被所有的ISession共享. 注意NHibernate查 ...
- k8s调度-指定node
1.给node加标签 kubectl label nodes k8s-slave2 slave= 2.查看标签 [root@k8s_master centos7]# kubectl describe ...
- 刨根问底 HTTP 和 WebSocket 协议(上)
HTTP vs WebSocket 那天和boss聊天,不经意间提到了Meteor,然后聊到了WebSocket,然后就有了以下对话,不得不说,看问题的方式不同,看到的东西也会大不相同. A:Mete ...
- Spring Cloud 微服务四:熔断器Spring cloud hystrix
前言:在微服务架构中,一般都是进程间通信,有可能调用链都比较长,当有底层某服务出现问题时,比如宕机,会导致调用方的服务失败,这样就会发生一连串的反映,造成系统资源被阻塞,最终可能造成雪崩.在sprin ...
- 利用asset存储mesh
做mesh导出的时候遇到了这个问题. 最后解决: 存储mesh数据:AssetDatabase.CreateAsset(meshfilter.mesh, "Assets/" + & ...
- PHP-Manual的学习----【语言参考】----【类型】-----【array数组】
1.Array 数组 PHP 中的 数组 实际上是一个有序映射.映射是一种把 values 关联到 keys 的类型.此类型在很多方面做了优化,因此可以把它当成真正的数组,或列表(向量),散列表(是 ...
- Hadoop学习笔记——Hadoop经常使用命令
Hadoop下有一些经常使用的命令,通过这些命令能够非常方便操作Hadoop上的文件. 1.查看指定文件夹下的内容 语法: hadoop fs -ls 文件文件夹 2.打开某个已存在的文件 语法: h ...