设计模式:Decorator模式(即装饰者模式)------------个人理解
来源:互联网 发布:如何刷mac系统 编辑:程序博客网 时间:2024/05/22 14:34
前言:
最近在研究自己的架构,所以去看了一些设计模式,是不是可以在自己的架构中使用,让自己的架构更加的完美,(之前的架构完全是自己凭借自己的主观意识去写的所以很乱。)看到设计模式 Decorator模式,卡住了,不是看不懂,而是不明白Decorator模式和派生子类的区别有什么不同之处,很费解,网上各位的解答也没有让我说出这两个的具体区别在哪里,所以还是自己理解理解,加深自己的印象,理解错误了 希望大家指出。
什么是Decorator模式:
用Decorator类给类添加其他作用的方法,而不是通过继承的方式来添加方法。减少系统复杂度和继承的深度。
结构图:
从上图可以看出Component是一个虚基类。他的子类ConcreteComponent是具体的实例类。比如:Component是表示动物类,它"会吃"是这个类的接口,而ConcreteComPonent是表示一个具体的动物,比如人。而Decorator这个类也是继承Component他是来装饰动物这个类派生的具体实例类。如果只有一种装饰 。就这个装饰,我们可以不必去重写Decorator类,但是如果是一种装饰,也没有必要用这种模式 直接用继承模式也就行了,所以我们这里注重的还是添加多种装饰。
这里举例2种装饰:1. 人吃饭前煮饭,2.吃完饭洗碗
ComcreteDecorator类就表示具体的装饰。我们下面会列出具体代码:1. 人吃饭前煮饭 =ComcreteDecoratoA 2.吃完饭洗碗 =ComcreteDecoratoB
ComcreteDecoratoA 在创建的时候传入Component指针,然后再内部用Component的对象指针调用Operation,实际上操作的是ConcreteComponent的对象。
所以在ComcreteDecoratoA 对象调用Operation方法,在调用的方法里面调用一个添加一个“洗手”的方法,再用传进来的Component对象调用Operation,这样实际调用了ConcreteComponent人吃饭,这样就在ConcreteComponent 吃饭前 调用了洗手了。
具体代码:
class Component
{
public:
virtual void Operation()=0;
};
class ConcreteCompontent: public Component
{
public:
void Operation()
{
cout << "吃饭"<<endl;
}
};
class Decorator:public Component
{
public:
Component* pcom;
Decorator(Component* pcom)
{
this->pcom = pcom;
}
void Operation()
{
}
};
class ComcreteDecoratoA :public Decorator
{
public:
ComcreteDecoratoA(Component* pcom):Decorator(pcom)
{
}
void Operation()
{
Addfun();
pcom->Operation();
}
void Addfun()
{
cout << "洗手"<<endl;
}
};
class ComcreteDecoratoB :public Decorator
{
public:
ComcreteDecoratoB(Component* pcom):Decorator(pcom)
{
}
void Operation()
{
pcom->Operation();
Addfun();
}
void Addfun()
{
cout << "洗碗"<<endl;
}
};
void main()
{
Component *pcom=new ConcreteCompontent: ();
Decorator *pdec = new ComcreteDecoratoA(pcom);
pdec->Operation();
Decorator *pdec2 = new ComcreteDecoratoB(pcom);
pdec2->Operation();
}
//输出 :
1.洗手
2.吃饭
3.吃饭
4.洗碗
这里就添加了两个装饰
- 设计模式:Decorator模式(即装饰者模式)------------个人理解
- 设计模式-装饰者模式(Decorator)
- Decorator装饰者设计模式
- 设计模式之Decorator(装饰者)
- 设计模式 - 装饰 Decorator
- Decorator(装饰)设计模式
- 设计模式之Decorator(装饰者模式)
- 设计模式-装饰者模式(Decorator Pattern)
- Java设计模式:装饰者模式(Decorator)
- [设计模式]Decorator装饰者模式
- 设计模式(7) - Decorator装饰者模式
- 设计模式学习-Decorator装饰者模式
- 设计模式之(Decorator)装饰者模式
- 设计模式--装饰者模式Decorator
- 设计模式: 装饰者(decorator)模式
- [C++设计模式] decorator 装饰者模式
- [设计模式] 装饰者模式Decorator
- 设计模式之装饰者模式(Decorator)
- libevent学习笔记
- Uncaught TypeError: Cannot assign to read only property 'exports' of object '#<Object>'
- C++ primer阅读笔记----------表达式
- Oracle 遭遇ORA-02064 :不支持分布式操作 解决
- 【去哪儿】寻找Coder
- 设计模式:Decorator模式(即装饰者模式)------------个人理解
- win10下用tomcat配置负载均衡
- 如何在FPGA中进行分频
- Maximum Average Subarray I
- Keil MDK中使用pc-lint的详细方法
- java中的IO整理
- iOS开发之设置兼容机型
- 获取中英文混排字符串的实际长度(字节数)
- spark-2.1.0集群搭建