• 装饰器模式


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

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

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

    1.直接修改原有类

      显然这种方法不太可取。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    其他类似。

    调用如下:

      需要说明一下:

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

  • 相关阅读:
    wp7订餐客户端源码
    AOP技术术语
    urlpattern详解
    .net 访问IBM DB2 数据库
    入驻博客园
    hadoop视频
    阿里OneData构建数据指标体系
    大数据领域全景解析
    PyTorch中梯度为什么默认自动累加,在反向传播前要手动将梯度清零?
    Pytorch:Dataloader和Dataset以及搭建数据部分的步骤
  • 原文地址:https://www.cnblogs.com/kekelele/p/7526827.html
Copyright © 2020-2023  润新知