装饰者模式
装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。
动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活.
应用场景
1、扩展一个类的功能。 2、动态增加功能,动态撤销。
实现
创建一个饮料接口:
public interface Drink {
String makeDrink();
}
创建两个子类
public class Tea implements Drink{
@Override
public String makeDrink() {
System.out.println("做茶");
return "make a tea";
}
}
public class Water implements Drink {
@Override
public String makeDrink() {
System.out.println("一杯水");
return "water";
}
}
创建装饰者:
public class Decorate implements Drink{
// 传入drink类,修饰drink
Drink drink;
public Decorate(Drink drink) {
this.drink = drink;
}
@Override
public String makeDrink() {
drink.makeDrink();
return "decorate";
}
}
创建具体装饰者,例如给饮料加冰糖雪梨:
public class ConcurDecorate extends Decorate {
public ConcurDecorate(Drink drink) {
super(drink);
}
public String makeDrink() {
drink.makeDrink();
System.out.println("加冰糖雪梨");
return "concur decorate";
}
}
测试类:
public static void main(String[] args) {
Tea tea = new Tea();
Water water= new Water();
Drink drink = new ConcurDecorate(tea);
Drink drink1 = new ConcurDecorate(water);
drink.makeDrink();
drink1.makeDrink();
Drink drink2 = new ConcurDecorate(drink);
drink2.makeDrink();
}
输出结果:
- 做茶
- 加冰糖雪梨
- 一杯水
- 加冰糖雪梨
- 做茶
- 加冰糖雪梨
- 加冰糖雪梨
总结
- 装饰者需要实现接口
- 接口类传入装饰者的构造器
- 具体装饰者内容集成装饰者,添加不同的装饰
网友评论