装饰器模式

  近来,接触了装饰器模式,想在此记录一下思路,以便日后查看。

  首先,说明一下装饰器模式的作用:在不改变原有代码的情况下,不断适应变化的需求。  即能够动态的给行为添加功能。这对我们开发来说,作用还是蛮大的,毕竟,天下客户和产品经理都一样善变啊(笑哭)。

  装饰器模式,是利用对象组合的形式,给对象添加功能。大家都知道,类的关系分为:继承,关联,聚合,组合。对于一般情况来说,我们为一个对象添加方法,可有以下方法:

1.直接修改原有类

  显然这种方法不太可取。

2.通过派生对应的子类来进行扩展相应的功能。

  这种方法可以适应一部分功能,但是有些需求是做不到的,例如说,我们在一个网站的学习的流程

《1》刚开始定为:登录-》学习;

《2》之后,我们又规定必须要预习才能够学习,那么流程就变为了 登录-》预习-》学习 ;

《3》后来,网站上学习的人越来越多了,我们又开设了vip学习班,那么我们的流程就变为了 支付-》登录-》预习-》学习;

《4》后来,为了巩固同学们的学习效果,在每节课之后,又添加了作业,所以,流程又变为了 支付-》登录-》预习-》学习-》作业 等。

这样,我们利用派生来进行维护,就不如用组合来进行实现了。(我们这里时候的组合,并不单纯是组合,其实是继承加组合的形式实现的)

3.通过组合的形式/装饰器模式

我们按照上面的流程来实施项目:首先,我们应该建立一个学生类,但是这个学生的学习方式是变化的,所以我们就需要建立一个抽象类的学生

我们还需要建立两种类型的学生的实体:普通学员和vip学员

 

 

 

然后,我们需要建立一个基类的装饰器类

接下来,就是具体细节的实现了

下面我们分析学生有哪些行为呢?

从上图,我们可以看出,学生一共有登录,预习,学习,作业这几个行为。我们根据行为创建了不同的类,如下:

其他类似。

调用如下:

 

  需要说明一下:

装饰器模式的执行顺序:我个人的理解就像是穿衣服:在方法之前,就是穿的过程,在方法之后就是脱的过程。

 

posted @ 2017-09-15 15:49  keke..lele  阅读(136)  评论(0编辑  收藏  举报