饮料加料设计模式:建造者模式详解
饮料加料设计模式:建造者模式详解
在点饮料时,顾客可能需要添加一些配料,例如牛奶、红豆等。这些配料还可以添加多份。为了更好地处理这种复杂的对象构建过程,我们可以选择使用建造者模式。
建造者模式的优势
建造者模式可以将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。在本例中,饮料和配料之间存在复杂的组合关系,选择建造者模式能够更好地处理这种复杂的组合关系,同时也能方便地扩展不同种类的饮料和配料。
代码实现
首先定义饮料和配料的抽象类:
public abstract class Beverage {
protected String description; // 描述
public String getDescription() {
return description;
}
public abstract double cost(); // 计算价格
}
public abstract class CondimentDecorator extends Beverage {
public abstract String getDescription();
}
然后定义具体的饮料类:
public class Coffee extends Beverage {
public Coffee() {
description = "Coffee";
}
public double cost() {
return 2.0;
}
}
public class Tea extends Beverage {
public Tea() {
description = "Tea";
}
public double cost() {
return 1.5;
}
}
定义具体的配料类:
public class Milk extends CondimentDecorator {
private Beverage beverage;
private int count;
public Milk(Beverage beverage, int count) {
this.beverage = beverage;
this.count = count;
}
public String getDescription() {
return beverage.getDescription() + " + Milk x " + count;
}
public double cost() {
return beverage.cost() + 0.5 * count;
}
}
public class RedBean extends CondimentDecorator {
private Beverage beverage;
private int count;
public RedBean(Beverage beverage, int count) {
this.beverage = beverage;
this.count = count;
}
public String getDescription() {
return beverage.getDescription() + " + Red Bean x " + count;
}
public double cost() {
return beverage.cost() + 1.0 * count;
}
}
客户端调用代码:
Beverage coffee = new Coffee();
coffee = new Milk(coffee, 2);
coffee = new RedBean(coffee, 1);
System.out.println(coffee.getDescription() + " $" + coffee.cost());
Beverage tea = new Tea();
tea = new RedBean(tea, 3);
System.out.println(tea.getDescription() + " $" + tea.cost());
类图

通过建造者模式,我们可以轻松地构建出各种不同的饮料组合,并且代码结构清晰易懂,可扩展性强。
原文地址: https://www.cveoy.top/t/topic/nRnQ 著作权归作者所有。请勿转载和采集!