装饰模式(Decorator)
2023-04-18 15:02:39 时间
2015/4/28
装饰模式(Decorator),动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。—大话设计模式
#include <vector>
#include <iostream>
using namespace std;
/*基类*/
class Component{
public:
virtual void Operation(){
cout<<"的";
};
};
/*被装饰类*/
class ConcreteComponent:public Component{
public:
void Operation(){
Component::Operation();
cout<<"小瞿"<<endl;
}
};
/*装饰类的基类*/
class Decorator:public Component{
private:
/*
此处为了让装饰类连成环并且可以指向装饰类也可以指向被装饰类
所以使用了同一个基类指针形成多态
*/
Component *pc;
public:
Decorator(Component *p){ this->pc=p;}
virtual void Operation(){
pc->Operation();
}
};
class ConcreteDecoratorA:public Decorator{
public:
ConcreteDecoratorA(Component *t):Decorator(t){
}
void Operation()
{
cout<<"打着领带";
Decorator::Operation();
}
};
class ConcreteDecoratorB:public Decorator{
public:
ConcreteDecoratorB(Component *t):Decorator(t){
}
void Operation()
{
cout<<"身穿西装";
Decorator::Operation();
}
};
class ConcreteDecoratorC:public Decorator{
public:
ConcreteDecoratorC(Component *t):Decorator(t){
}
void Operation()
{
cout<<"穿着皮鞋";
Decorator::Operation();
}
};
int main(void)
{
Component *p=new ConcreteComponent();
Component *p1=new ConcreteDecoratorC(p);
Component *p2=new ConcreteDecoratorB(p1);
Component *p3=new ConcreteDecoratorA(p2);
p3->Operation();
return 0;
}
何时使用装饰模式:当系统有了新的功能需要添加的时候,就是向旧的类添加新的修饰代码。
但是具有缺点:装饰模式顺序很重要
相关文章
- 腾讯开源|TAT Agent-助力轻松完成云服务器运维管理任务
- 如果,你需要一个理由……
- 域名报告
- Wiztalk | 134期 陈果《RPC-远端过程调用》
- TAPD保密功能全新升级!为重要需求加把锁!
- 云原生知识趣味问答,参与答题 PK 来领腾讯周边啦~
- 智能 Request 推荐,K8s 资源利用率提升 252%
- Windows 安装curl命令注意事项
- 商标注册查询官网怎么查?商标注册申请如何提高通过率?
- 商标注册代理公司一般收费多少?商标注册需要多长时间?
- 商标注册名字查询系统是什么?如何使用该系统?
- 商标注册申请官网是什么?如何通过该网站注册商标?
- 商标注册申请需要什么材料?商标命名应当注意什么?
- 什么是供应链金融公司?供应链金融公司能够提供哪些帮助?
- 什么是供应链金融模式?供应链金融模式有哪些特点?
- 什么是供应链金融业务模式?具有哪些特点?
- 网站搭建公司哪家好 搭建网站的费用
- 网站建设的流程是什么 网站制作的费用是多少
- 网站建设平台有哪些 网站建设需要注意什么
- 微信企业直播怎么开 企业微信直播可以回放吗