装饰器模式
近来,接触了装饰器模式,想在此记录一下思路,以便日后查看。
首先,说明一下装饰器模式的作用:在不改变原有代码的情况下,不断适应变化的需求。 即能够动态的给行为添加功能。这对我们开发来说,作用还是蛮大的,毕竟,天下客户和产品经理都一样善变啊(笑哭)。
装饰器模式,是利用对象组合的形式,给对象添加功能。大家都知道,类的关系分为:继承,关联,聚合,组合。对于一般情况来说,我们为一个对象添加方法,可有以下方法:
1.直接修改原有类
显然这种方法不太可取。
2.通过派生对应的子类来进行扩展相应的功能。
这种方法可以适应一部分功能,但是有些需求是做不到的,例如说,我们在一个网站的学习的流程
《1》刚开始定为:登录-》学习;
《2》之后,我们又规定必须要预习才能够学习,那么流程就变为了 登录-》预习-》学习 ;
《3》后来,网站上学习的人越来越多了,我们又开设了vip学习班,那么我们的流程就变为了 支付-》登录-》预习-》学习;
《4》后来,为了巩固同学们的学习效果,在每节课之后,又添加了作业,所以,流程又变为了 支付-》登录-》预习-》学习-》作业 等。
这样,我们利用派生来进行维护,就不如用组合来进行实现了。(我们这里时候的组合,并不单纯是组合,其实是继承加组合的形式实现的)
3.通过组合的形式/装饰器模式
我们按照上面的流程来实施项目:首先,我们应该建立一个学生类,但是这个学生的学习方式是变化的,所以我们就需要建立一个抽象类的学生
我们还需要建立两种类型的学生的实体:普通学员和vip学员
然后,我们需要建立一个基类的装饰器类
接下来,就是具体细节的实现了
下面我们分析学生有哪些行为呢?
从上图,我们可以看出,学生一共有登录,预习,学习,作业这几个行为。我们根据行为创建了不同的类,如下:
其他类似。
调用如下:
需要说明一下:
装饰器模式的执行顺序:我个人的理解就像是穿衣服:在方法之前,就是穿的过程,在方法之后就是脱的过程。