装饰器模式
- 1.优点:独立扩展,不耦合
- 2.缺点:多层装饰比较复杂
Java JDK中 FileInputStream 的 BufferedInputStream 就是装饰器,扩展了 FileInputStream 类的功能,增加了流缓冲区,加快了传输速度和效率
public interface IDrink {
void eat();
}
public class Milk implements IDrink {
@Override
public void eat() {
log.info("喝牛奶");
}
}
public class XueBi implements IDrink {
@Override
public void eat() {
log.info("喝雪碧");
}
}
装饰器类,扩展原类的功能
public class DrinkDecorator {
private IDrink drink;
public EatDecorator(IDrink drink){
this.drink = drink;
}
public void eat() {
drink.eat();
//扩展功能
cake();
}
public void cake(){
System.out.println("吃蛋糕");
}
}
测试类
public class TestMain {
public static void main(String[] args) {
// 喝牛奶-吃蛋糕
DrinkDecorator milk = new DrinkDecorator(new Milk());
milk.eat();
System.out.println();
// 喝雪碧-吃蛋糕
DrinkDecorator xuebi = new DrinkDecorator(new XueBi());
xuebi.eat();
}
}