一、什么是装饰器模式
参照阿里巴巴大淘宝技术在知乎java中什么是装饰者模式?的解释。装饰者模式的核心思想是通过创建一个装饰对象(即装饰者),动态扩展目标对象的功能,并且不会改变目标对象的结构,提供了一种比继承更灵活的替代方案。需要注意的是,装饰对象要与目标对象实现相同的接口,或继承相同的抽象类;另外装饰对象需要持有目标对象的引用作为成员变量,而具体的赋能任务往往通过带参构造方法来完成。
二、装饰器模式如何实施
1.创建顶层接口
如下我们先定义一个顶层这里是一个车的接口
public interface Car {
String getName();
}
2.创建顶层对象的实现
根据顶层对象创建一个婚车对象。
public class WeddingCar implements Car {
@Override
public String getName() {
return "婚车";
}
}
3.创建一个顶层对象抽象装饰器
public abstract class AbstractDecorator implements Car{
private Car car;
public AbstractDecorator(Car car) {
this.car = car;
}
@Override
public String getName() {
return this.car.getName();
}
}
4.创建一个实际的装饰器
public class FirstCar extends AbstractDecorator{
public FirstCar(Car car) {
super(car);
}
@Override
public String getName() {
return "第一辆" + super.getName();
}
}
5.类图
6.使用场景
- Jdk里的Read、stream他们的各种装饰器类,BufferReader等等
- Spring session 中的 ServletRequestWrapper 类