一:什么是装饰者设计模式
此设计模式专门用于增强方法。
二:怎样使用设计模式
1.理论:
①.被装饰方法所在类必须有接口
②.装饰者固定结构:接口A,已知实现类C,装饰者创建的代理类B。
第一步:创建类B并实现接口A
第二步:提供类B的构造方法,参数类型为A,用于接收A接口的其它实现类(C)
第三步:给类B添加类型为A的成员变量,用于存放A接口的其他实现类
第四步:增强需要的方法
第五步:实现不需要增强的方法,方法体重调用成员变量存放的其它实现类对应的方法。
2.实例:
①.以去拉面馆吃拉面为例,一碗面做好后都会向里面加料装饰,所以先定义一个装饰拉面的接口,提供一个加料的方法:
/**
* 定义一个给面加料的接口
*/
public interface NoodleDecorate {
void addThings();
}
②.创建一个拉面(Noodle)类实现NoodleDecorate接口
public class Noodle implements NoodleDecorate {
/**
* 向面里加东西
*/
@Override
public void addThings() {
System.out.println("加两片肉末");
System.out.println("加一片萝卜");
System.out.println("加三根香菜");
}
}
③.普通的拉面做好之后,有人爱吃辣椒,想在拉面中添加辣椒,创建一个辣椒拉面(ChiliNoodle)类
/**
* 就是在不改变原有拉面的情况下,添加自己想要的调料
*/
public class ChiliNoodle implements NoodleDecorate {
private Noodle noodle;
public ChiliNoodle(Noodle noodle) {
this.noodle = noodle;
}
@Override
public void addThings() {
noodle.addThings();
System.out.println("加三勺辣椒");
}
}
④.测试类
public class NoodleTest {
public static void main(String[] args) {
/**
* 获取加过辣椒的面
*/
new ChiliNoodle(new Noodle()).addThings();
}
}
⑤.结果
三:参考
https://www.cnblogs.com/xiaowangtongxue/p/10716499.html