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

抽象构件(Component)角色:
- 定义一个抽象接口以规范准备接收附加责任的对象。
/***抽象构件*/public interface ManTikTok {void tiktok();}
- 定义一个抽象接口以规范准备接收附加责任的对象。
具体构件(ConcreteComponent)角色:
- 实现抽象构件,通过装饰角色为其添加一些职责。
public class MiTikTok implements ManTikTok {@Overridepublic void tiktok() {System.out.println("雷军在抖音直播中");}}
- 实现抽象构件,通过装饰角色为其添加一些职责。
抽象装饰(Decorator)角色:
- 继承抽象构件,并包含具体构件的实例,可以通过其子类扩展具体构件的功能。
/*** 抽象装饰*/public interface TiktokDecorator extends ManTikTok{void enable();}
- 继承抽象构件,并包含具体构件的实例,可以通过其子类扩展具体构件的功能。
具体装饰(ConcreteDecorator)角色:
实现抽象装饰的相关方法,并给具体构件对象添加附加的责任。
/*** 装饰器只关心增强这个类的方法*/public class MeiYanDecorator implements TiktokDecorator{//装饰谁?private ManTikTok manTikTok;public MeiYanDecorator(ManTikTok manTikTok) {this.manTikTok = manTikTok;}@Overridepublic void tiktok() {//保留之前的功能manTikTok.tiktok();//开启增强功能enable();}//定义了增强功能@Overridepublic void enable() {System.out.println("开启推广直播间");}}
测试方法
public static void main(String[] args) {//被装饰对象MiTikTok miTikTok = new MiTikTok();miTikTok.tiktok();MeiYanDecorator decorator = new MeiYanDecorator(miTikTok);decorator.tiktok();}
2. 应用场景
无处不在…..
SpringSession中如何进行session与redis关联?HttpRequestWrapper
session:数据存在了内存
session:数据存在redis
HttpSession;getAttribute();
```java Wrapper(session){
getAttribute(String param){ redis.get(param) };
} ```
MyBatisPlus提取了QueryWrapper,这是什么?
Spring中的BeanWrapper是做什么?包装了Bean。bean的功能增强?
Spring Webflux中的 WebHandlerDecorator?
已存的类,每一天在某个功能使用的时候发现不够,就可以装饰器。
