0

装饰器模式

2024.10.11 | cuithink | 86次围观

装饰器模式在不改变原始类接口的情况下,对原始类功能进行增强,并且支持多个装饰器的嵌套使用

装饰器模式的各个角色

  • Component 抽象构件角色: 是具体构件和抽象装饰类的父类,声明了具体构件中实现的业务方法,使得客户端能以一致的方式处理未装饰和已装饰对象。

  • Concrete Component 具体构件角色: 是抽象构件类的子类,定义了具体的构建对象并实现了抽象构建中声明的方法。装饰类可以给它增加额外的职责(方法)。

  • Decorator 抽象装饰角色: 是抽象构件类的子类,用于给具体构件增加职责,维护一个指向抽象构件对象的引用,以达到装饰的目的。

  • Concrete Decorator 具体装饰角色: 是抽象装饰类的子类,负责向构件添加新的职责。每个具体装饰类都定义了一些新的行为,可以调用已定义的方法并增加新的方法。

装饰器模式和代理模式的不同

目的意图不同

  • 代理模式:  控制  ---> 为了自己

  • 装饰器模式: 增强   ---> 为了目标类

使用差别

  • 代理模式:  对于被代理对象 有绝对的控制权,可以执行或不执行

  • 装饰器模式: 没有控制权, 肯定会执行,增加了一层装饰的功能

对于客户端

  • 代理模式: 更关心的是被代理对象的功能

  • 装饰器模式: 更关心对于装饰器进行增强的功能

装饰器模式的适用场景

  • 动态扩展功能

  • 不支持继承扩展类的场景

经典场景:有多个装饰时是怎么保证后面的装饰,在前面装饰的基础上装饰的。比如字符,需要加密+压缩。怎么能让压缩,在加密的基础上压缩 ?


粤ICP备16076548号
发表评论