装饰者模式(Decorator)

2020-12-03  本文已影响0人  bin丶

前言

设计模式系列代码均持续更新在我的gitHub:to github


装饰者模式定义


装饰者模式成员


类图


核心代码

public abstract class Drink {

    private String desc; // 描述
    private float price;
    // 计算费用的抽象方法
    // 交给子类去实现
   public abstract float cost();
}
public class Coffee extends Drink {
    public float cost() {
        return super.getPrice();
    }
}
public class Decaf extends Coffee {

    public Decaf() {
        setDesc(" Decaf Coffee ");
        setPrice(10.00f);
    }
}
public class Decorator extends Drink {

    private Drink drink;

    public Decorator(Drink drink) {
        this.drink = drink;
    }

    /* 递归求总价格
     * getPrice = setPrice() 的值,相当于调料的价格
     * this.drink.cost() 相当于单品咖啡 + 之前就已经加入的调料的价格 */
    public float cost() {
        return getPrice() + this.drink.cost();
    }

    @Override
    public String getDesc() {

        return  this.drink.getDesc() + "加了" + super.getDesc();
    }
}
public class Milk extends Decorator {
    public Milk(Drink drink) {
        super(drink);
        setDesc(" 牛奶 ");
        setPrice(3.0f); // 调味品的价格
    }

    public void addSweet() {
        System.out.println("牛奶给咖啡加了点甜味");
    }
}

总结

装饰者模式的优点

装饰者模式的缺点

装饰者模式应用场景[个人理解]

上一篇下一篇

猜你喜欢

热点阅读