描述
- 适配器是连接两个类,可以增强一个类,装饰器是增强一个类
- 向一个现有的对象添加新的功能,同时又不改变其结构。属于对象结构型模式。
- 创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。

主要角色
- 抽象构件(Component)角色:
- 定义一个抽象接口以规范准备接收附加责任的对象。
- 具体构件(ConcreteComponent)角色:
- 实现抽象构件,通过装饰角色为其添加一些职责。
- 抽象装饰(Decorator)角色:
- 继承抽象构件,并包含具体构件的实例,可以通过其子类扩展具体构件的功能。
具体装饰(ConcreteDecorator)角色:
}
```javapublic class ZH_Translation extends AbstractTranslation{@Overridevoid translation() {System.out.println("你好");}}
public abstract class TranslationWrapper {abstract void translationWrapper();}
public class JP_TranslationWrapper extends TranslationWrapper{private AbstractTranslation translation;public JP_TranslationWrapper(AbstractTranslation translation) {this.translation = translation;}@Overridevoid translationWrapper() {translation.translation();apply();}private void apply(){System.out.println("增强开始=》空你几哇");}}
public class WrapperTest {public static void main(String[] args) {ZH_Translation zh_translation = new ZH_Translation();zh_translation.translation();JP_TranslationWrapper jp_translationWrapper = new JP_TranslationWrapper(zh_translation);jp_translationWrapper.translationWrapper();}}//测试输出//你好//你好//增强开始=》空你几哇
使用场景
什么场景使用?
- 无处不在….. SpringSession中如何进行session与redis关联?HttpRequestWrapper
- session:数据存在了内存
- session:数据存在redis
- HttpSession;getAttribute();
- Wrapper(session){ getAttribute(String param){ redis.get(param) }; }
- MyBatisPlus提取了QueryWrapper,这是什么?
- Spring中的BeanWrapper是做什么?包装了Bean。bean的功能增强?
- Spring Webflux中的 WebHandlerDecorator?
- 已存的类,每一天在某个功能使用的时候发现不够,就可以装饰器。 ……
补充
装饰器和适配器非常相似。
装饰器起到对目标类增强的作用,具体增强的内容在自己内部实现,不需要借助其他第三方类
而适配器是在连接第三方类来实现对目标类的增强
