美文网首页
设计模式-装饰模式

设计模式-装饰模式

作者: _BK_徐静 | 来源:发表于2019-06-14 00:41 被阅读0次

    设计模式是一套被在实际使用中,总结出来的一些代码设计经验的总结,学习设计模式有助于理解框架的结构。成熟的框架通常使用了多种设计模式,如果你熟悉这些设计模式,毫无疑问,对于快速掌握框架的结构有很大的帮助。

    主要功能

    ​ 如其名,主要功能就是装饰,就是够在不改变原类文件、和不使用继承的情况下,动态扩展一个对象的功能和职责。装饰模式是通过将真实的对象包裹起来,然后对其进行装饰,并一层一层的传递下去,逐层装饰,直到装饰完成。

    简单的说就是,在不违背开放-封闭原则的情况下,动态为一个对象增加一系列功能和职责

    UML类图结构

    装饰模式的UML的类图结构

    装饰模式中的角色

    • 抽象构件角色(Component): 一个抽象的接口,用来规范被装饰对象。
    • 具体构造角色(ConcreteComponent ):业务场景比较简单,Component和ConcreteComponent的角色可以合并成一个
    • 装饰角色(Decoretor):持有一个抽象构件角色的引用,并通过构造方法或者set方法,对其赋值
    • 具体的装饰角色(ConcreteDecoretor): 业务场景比较简单时,ConcreteDecoretor和Decoretor两个的角色可以合并为一个

    对模式的理解

    装饰角色持有一个被装饰对象的引用,在转发请求前后增加附加的功能,实现对被装饰对象功能的扩展,并将当前装饰角色再依次传递给下一个具体的装饰角色,完成一系列的装饰,达到最终的效果

    关键字

    动态扩展依次传递

    • 因为需要对"你"进行动态扩展,不能使用继承(继承是属于静态行为,无法做到动态改变,同时继承会违反开闭原则),所以装饰角色需要持有一个被装饰对象的引用,可以通过set方法构造方法对其初始化和对象的传递

    • 装饰角色为什么需要实现和被装饰对象相同的接口,因为需要依次传递到不同的具体装饰角色中,方法参数类型必须一致

      特点

    • 装饰模式的对装饰顺序敏感

    • 装饰模式构造过程相比于建造者模式是不稳定的

    • 可以分离对象的核心职责与装饰功能

    • 更容易利用功能,把复杂的功能分散到每一个装饰器中,有利于利用利用,同样也会产生很多细粒度的对象

    应用场景

    • ​ 装饰模式在JAVA中最典型的应用应该就是I/O流了
    • ​ 通过装饰模式实现消息的加密解密
    • ​ 通过装饰模式实现类似AOP的功能
    • ​ 其它场景

    相关文章

      网友评论

          本文标题:设计模式-装饰模式

          本文链接:https://www.haomeiwen.com/subject/hgsyfctx.html