快速理解设计模式之结构型设计模式(装饰模式)
声明:文章里面某些例子只代表我个人的观点,分享出来是希望能够帮助大家理解设计模式,如果认为比较牵强还请手下留情,程序员不容易啊~。
在前面两篇文章中我们讲解了创建型设计模式,所谓创建就是创建对象,各种设计模式呢就是给我们创建对象提供了更好的方法,让我们的代码设计更加合理,符合OO,而不是流线式的编程,你懂得。
那么接下来,我会给大家讲解一下我对结构型设计模式的理解,结构型设计模式顾名思义是在不增加任何外在的对象的基础之上对结构进行改造,使其焕然一新。今天主要给大家介绍装饰模式。
一、装饰模式
听到装饰大家都不陌生,我们新家需要装修,沙发、衣橱、床、这些我都买好了,这些家具到底该怎么放呢呢? 很多种方案,不知道哪一种好。Oh~ my god! 不同的摆放效果会不一样,纠结啊。
女生呢出门前最爱的就是服装搭配了,出门前在镜子面前各种式,不到最后离开的一分钟是不会决定的,这期间就会有很多种装饰。
我们试试装饰这个过程的UML建模呢:
从上面两个UML类图中我们看到了装饰模式的的两个要点:
1.装饰者需要知道装饰对象。(UML类图中聚合可以体现)
2.装饰对象(人或者房屋)需要把一系列装饰行为交给装饰者,让装饰者帮 忙装饰,所以要用到继承。
综上所述:可以理解为把自身的一些行为交给别人来完成。
比如房子装饰:就是交给另一个对象来装饰,房子不需要管装饰这个过程。
比如穿衣:人不需要管穿衣这个过程,把这个行为交给另一个对象来实现了,由主动变为被动。
比如做作业:不爱学习的同学把作业交给学习好的同学帮忙完成。
下面我们来写写房屋装饰代码:
结果:
从上面的结果我们知道,把自身的一系列行为交给别人做有什么好处呢?
答案就是:这些行为的顺序可以变换。
以前我们举的一些例子都是简单的生活中的例子,下面我举个实际框架中应用实例,以便更具说服力!读取文件流的例子。我看了一下.net 框架中实现IO的代码。
先截图说明IO流也是用的装饰模式。
建模:
好啦,装饰模式就讲到这里了。我们回顾一下,装饰模式两个要点:
1.装饰者要知道装饰对象。
2.装饰对象要把一些列行为交给装饰者来完成。
注:本文为作者原创,如需转载请注明出处,谢谢~