设计模式-装饰模式

装饰模式

这里只讲一些理论上的东西,实现将会在接下来几篇文章具体展开,有兴趣,可以一起研究讨论吖!!!下面进入正题。


定义:动态地给对象添加一些额外的功能且不改变其结构。就增加功能这一点,装饰模式要比增加子类灵活。


接下来看下装饰模式的结构图:
在这里插入图片描述


模块大概代码如下:

#include<cstdio>
#include<cstdlib>
#include<ctime>
#include<string>
#include<iostream>
#include<algorithm>
using namespace std;
class component{
	public:
		virtual void Operation() = 0 ;
};
class ConcreteComponent: public component{
	public:
		virtual void Operation(){
			cout<<"具体操作的对象"<<endl;
		}
};
class Decorate : public component{
	protected:
		component* Component;
	public:
		void SetComponent(component* component){
			this->Component = component;
		}
		virtual void Operation(){
			if(Component!=NULL){
				Component->Operation();
			}
		}
		
};
class ConcreteDecorateA : public Decorate{
	private:
		string addState;
	public:
		virtual void Operation(){
			Decorate::Operation();
			addState = "ConcreteDecorateA";
			cout<<addState<<endl;
		}
};
class ConcreteDecorateB : public Decorate{
	private:
		void AddState(){
			cout<<"ConcreteDecorateB"<<endl;
		}
	public:
		virtual void Operation(){
			Decorate::Operation();
			AddState();
		}
};
int main(){
	ConcreteComponent* c = new ConcreteComponent;
	ConcreteDecorateA* d1 = new ConcreteDecorateA;
	ConcreteDecorateB* d2 = new ConcreteDecorateB;
	d1->SetComponent(c);
	d2->SetComponent(d1);
	d2->Operation();
}

//输出如下:
//具体操作的对象
//ConcreteDecorateA
//ConcreteDecorateB

装饰模式通过利用SetComponent来使得对象进行包装,这样每个装饰对象的实现就和如何使用这个对象分开,每个装饰对象只关心自己的功能,不需要关心如何被添加到对象链当中。


总结

装饰模式为已有功能动态的增加新的功能。它将每个要装饰的功能放在独立的类中, 并让这个类包装它要装饰的对象,因此,当需要执行特殊的行为时,客户代码就可以在运行时根据需要选择性,顺序性装饰功能包装对象。
缺点就是多层装饰使用起来相对比较复杂

下面还有几个例子:
实现一
实现二
实现三

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值