2024.10.11 | cuithink | 841次围观
装饰器模式在不改变原始类接口的情况下,对原始类功能进行增强,并且支持多个装饰器的嵌套使用
装饰器模式的各个角色
Component 抽象构件角色: 是具体构件和抽象装饰类的父类,声明了具体构件中实现的业务方法,使得客户端能以一致的方式处理未装饰和已装饰对象。
Concrete Component 具体构件角色: 是抽象构件类的子类,定义了具体的构建对象并实现了抽象构建中声明的方法。装饰类可以给它增加额外的职责(方法)。
Decorator 抽象装饰角色: 是抽象构件类的子类,用于给具体构件增加职责,维护一个指向抽象构件对象的引用,以达到装饰的目的。
Concrete Decorator 具体装饰角色: 是抽象装饰类的子类,负责向构件添加新的职责。每个具体装饰类都定义了一些新的行为,可以调用已定义的方法并增加新的方法。
装饰器模式和代理模式的不同
目的意图不同
代理模式: 控制 ---> 为了自己
装饰器模式: 增强 ---> 为了目标类
使用差别
代理模式: 对于被代理对象 有绝对的控制权,可以执行或不执行
装饰器模式: 没有控制权, 肯定会执行,增加了一层装饰的功能
对于客户端
代理模式: 更关心的是被代理对象的功能
装饰器模式: 更关心对于装饰器进行增强的功能
装饰器模式的适用场景
动态扩展功能
不支持继承扩展类的场景
经典场景:有多个装饰时是怎么保证后面的装饰,在前面装饰的基础上装饰的。比如字符,需要加密+压缩。怎么能让压缩,在加密的基础上压缩 ?
粤ICP备16076548号
发表评论