饮料加料设计模式:建造者模式详解

在点饮料时,顾客可能需要添加一些配料,例如牛奶、红豆等。这些配料还可以添加多份。为了更好地处理这种复杂的对象构建过程,我们可以选择使用建造者模式

建造者模式的优势

建造者模式可以将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。在本例中,饮料和配料之间存在复杂的组合关系,选择建造者模式能够更好地处理这种复杂的组合关系,同时也能方便地扩展不同种类的饮料和配料。

代码实现

首先定义饮料和配料的抽象类:

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());

类图

Builder Pattern

通过建造者模式,我们可以轻松地构建出各种不同的饮料组合,并且代码结构清晰易懂,可扩展性强。

饮料加料设计模式:建造者模式详解

原文地址: https://www.cveoy.top/t/topic/nRnQ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录