概述
- 适配器是连接两个类,可以增强一个类,装饰器是增强一个类
- 向一个现有的对象添加新的功能,同时又不改变其结构。属于对象结构型模式。
- 创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能
讲人话就是对代码层面已经有的类,加上别的功能【装饰一些别的类,让代码看上去更简洁明了,可以按功能将不同的代码分开,符合ocp和代码可读性】
什么场景使用?
无处不在…
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?
已存的类,每一天在某个功能使用的时候发现不够,就可以装饰器。
…
代码
// 需要被装饰的类
package com.xusj.future.structural.wrapper;
/**
* @author xusj
* <br>CreateDate 2022/7/28 22:31
*/
public abstract class ManTikTok {
abstract void tiktok();
}
// 被装饰类子类
package com.xusj.future.structural.wrapper;
/**
* @author xusj
* <br>CreateDate 2022/7/28 22:32
*/
public class WuTikTok extends ManTikTok{
@Override
void tiktok() {
System.out.println("wode");
}
}
// 装饰类
package com.xusj.future.structural.wrapper;
/**
* @author xusj
* <br>CreateDate 2022/7/28 22:38
*/
public abstract class TikTokDecorator extends ManTikTok {
/**
* 方法二
*/
abstract void enable();
}
// 继承或实现装饰类,这样既有了被装饰类的方法,也有了装饰类的额外抽离出来的方法
package com.xusj.future.structural.wrapper;
/**
* 装饰者提供而外的功能
*
* @author xusj
* <br>CreateDate 2022/7/28 22:41
*/
public class MWrapper extends TikTokDecorator {
@Override
void tiktok() {
}
@Override
void enable() {
}
}