JAVA设计模式之装饰者模式---奶茶点单

定义:装饰者模式就是指在不改变现有对象结构的情况下,动态地给对象增加一些职责(额外的功能)的设计模式。

UML 类图:

具体实现:

public abstract class Beverage {
    //抽象方法
    public abstract double cost();
}

 这个继承上一个抽象类,一些装饰内容通过继承这个抽象类实现,实现插拔式编程(也就是动态的)

public abstract class ToppingDecorator extends Beverage {
    public abstract double cost();
}

 被装饰(也就是固定内容)的内容继承最顶层的抽象方法

public class FruitTea extends Beverage {

    @Override
    public double cost() {
        System.out.println("FruitTea cost:  "+15) ;
        return 15;
    }
}

 装饰(也就是动态变化的内容)继承第二个抽象类

public class Pudding extends ToppingDecorator{

    private static final int COST = 2;
    private final Beverage beverage;

    public Pudding(Beverage beverage) {
        this.beverage = beverage;
    }

    @Override
    public double cost() {
        System.out.println("Adding pudding cost:  " +COST);
        return COST + beverage.cost();
    }
}

小编白话理解:

比如说 去奶茶点下单 奶茶 咖啡就是我们所说的固定内容,而给奶茶加布丁,加珍珠给咖啡加糖加奶就是动态内容;如果代码开始写死加糖加奶需要多少钱,新来的顾客需要加冰,那你就需要改变原来的代码逻辑 并且不能写错,否则会影响之前加糖加奶的逻辑,装饰者模式会在不影响加糖加奶的逻辑上通过继承ToppingDecorator实现加冰的逻辑计算

 调用逻辑:

Beverage milkTea = new MilkTea();//点了一杯奶茶
milkTea = new Boba(milkTea);
milkTea = new Boba(milkTea);//加两份珍珠
milkTea = new Pudding(milkTea);//加一份布丁
double cost = milkTea.cost();//计算价格

 计算结果:

Adding pudding cost:  2
Adding Boba cost:  3
Adding Boba cost:  3
MlikTea cost:  16
24.0

不理解的地方打在评论区,看见会解答 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值