JAVA设计模式之 5.装饰者设计模式

 装饰者设计模式,对于一个抽象的类,对其添加自己想要的各种类修饰它。

代码特点:一边继承,一边又关联。意味着可以重写你,又可以拿到你所有的属性。 当然就可以装饰了。

abstract class Condiment extends Beverage {

    protected Beverage beverage;
@Data
abstract class Beverage {
    private String description;

    public Beverage (String description) {
        this.description = description;
    }

    public abstract double cost();
}

abstract class Condiment extends Beverage {

    protected Beverage beverage;
    public Condiment (Beverage beverage) {
        super("调料");
        this.beverage = beverage;
    }
}


class Milk extends Condiment {

    public Milk(Beverage beverage) {
        super(beverage);
    }

    @Override
    public double cost() {
        return beverage.cost() + 5;
    }

    @Override
    public  String getDescription() {
        return beverage.getDescription()+ "牛奶";
    }
}


class Mocha extends Condiment {

    public Mocha(Beverage beverage) {
        super(beverage);
    }

    @Override
    public double cost() {
        return beverage.cost() + 100;
    }

    @Override
    public  String getDescription() {
        return beverage.getDescription()+ "摩卡";
    }
}

class Decaf extends Beverage {

    public Decaf() {
        super("无糖咖啡");
    }

    @Override
    public double cost() {
        return 1;
    }
}

class Espresso extends Beverage {

    public Espresso() {
        super("意式浓缩");
    }

    @Override
    public double cost() {
        return 10;
    }
}

//装饰者设计模式
public class Decorator {
    public static void main (String[] args) {

        Beverage beverage = new Decaf();
        System.out.println(beverage.getDescription() + beverage.cost());
        Milk milk = new Milk(beverage);
        System.out.println(milk.getDescription() + milk.cost());
        Mocha mocha = new Mocha(milk);
        System.out.println(mocha.getDescription() + mocha.cost());

        System.out.println("***********************");
        Beverage beverage1 = new Decaf();
        Beverage b1 = new Milk(beverage1);
        Beverage b2 = new Mocha(beverage1);
        System.out.println(b2.getDescription() + b2.cost());
    }
}

 输出结果

无糖咖啡1.0
无糖咖啡牛奶6.0
无糖咖啡牛奶摩卡106.0
***********************
无糖咖啡摩卡101.0

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值