设计模式的分类和应用场景总结

建造者模式:构建复杂对象的精妙设计

建造者模式的核心思想

建造者模式的核心思想是将一个复杂对象的构建过程分为多个步骤,每个步骤由一个独立的"建造者"对象负责完成。最终,这些建造者协同工作,按顺序构建出一个完整的对象。

通过使用建造者模式,您可以在构建对象时灵活地添加、修改或删除步骤,而不会影响其他部分的代码。这种分离的方式有助于管理复杂对象的构建,提高可维护性和可读性。

建造者模式的参与者

建造者模式包含以下主要参与者:

  1. 产品(Product):要构建的复杂对象。产品通常包含多个属性和方法。

  2. 抽象建造者(Builder):定义了构建产品各个部分的接口。每个部分都有一个对应的建造方法。

  3. 具体建造者(Concrete Builder):实现了抽象建造者接口,负责构建产品的各个部分。每个具体建造者都可以构建出不同类型的产品。

  4. 指挥者(Director):负责调用具体建造者的方法,按照一定的顺序构建产品。指挥者知道如何构建一个完整的产品。

Java示例:建造者模式

让我们通过一个简单的Java示例来演示建造者模式。我们将构建一个Meal对象,包括主食、饮料和甜点。

// 产品类
class Meal {
    private String mainCourse;
    private String beverage;
    private String dessert;

    public void setMainCourse(String mainCourse) {
        this.mainCourse = mainCourse;
    }

    public void setBeverage(String beverage) {
        this.beverage = beverage;
    }

    public void setDessert(String dessert) {
        this.dessert = dessert;
    }

    public void describe() {
        System.out.println("Main Course: " + mainCourse);
        System.out.println("Beverage: " + beverage);
        System.out.println("Dessert: " + dessert);
    }
}

// 抽象建造者接口
interface MealBuilder {
    void buildMainCourse();
    void buildBeverage();
    void buildDessert();
    Meal getMeal();
}

// 具体建造者实现
class VegMealBuilder implements MealBuilder {
    private Meal meal = new Meal();

    @Override
    public void buildMainCourse() {
        meal.setMainCourse("Vegetarian Burger");
    }

    @Override
    public void buildBeverage() {
        meal.setBeverage("Water");
    }

    @Override
    public void buildDessert() {
        meal.setDessert("Fruit Salad");
    }

    @Override
    public Meal getMeal() {
        return meal;
    }
}

class NonVegMealBuilder implements MealBuilder {
    private Meal meal = new Meal();

    @Override
    public void buildMainCourse() {
        meal.setMainCourse("Chicken Burger");
    }

    @Override
    public void buildBeverage() {
        meal.setBeverage("Coke");
    }

    @Override
    public void buildDessert() {
        meal.setDessert("Chocolate Cake");
    }

    @Override
    public Meal getMeal() {
        return meal;
    }
}

// 指挥者
class Waiter {
    private MealBuilder mealBuilder;

    public Waiter(MealBuilder mealBuilder) {
        this.mealBuilder = mealBuilder;
    }

    public Meal constructMeal() {
        mealBuilder.buildMainCourse();
        mealBuilder.buildBeverage();
        mealBuilder.buildDessert();
        return mealBuilder.getMeal();
    }
}

public class BuilderPatternExample {
    public static void main(String[] args) {
        MealBuilder vegMealBuilder = new VegMealBuilder();
        MealBuilder nonVegMealBuilder = new NonVegMealBuilder();

        Waiter waiter1 = new Waiter(vegMealBuilder);
        Meal vegMeal = waiter1.constructMeal();
        System.out.println("Veg Meal:");
        vegMeal.describe();

        Waiter waiter2 = new Waiter(nonVegMealBuilder);
        Meal nonVegMeal = waiter2.constructMeal();
        System.out.println("Non-Veg Meal:");
        nonVegMeal.describe();
    }
}

在这个示例中,我们创建了一个Meal类作为产品。然后,我们定义了抽象建造者接口MealBuilder,并创建了两个具体建造者VegMealBuilderNonVegMealBuilder,它们分别构建了不同类型的餐点。最后,我们有一个Waiter类作为指挥者,它知道如何构建不同类型的餐点。

通过建造者模式,我们能够以可控和可扩展的方式构建不同类型的餐点,而不会使构建过程变得混乱。这提供了更好的灵活性和可维护性,尤其在构建复杂对象时非常有用。

看完如果对你有帮助,感谢点击下面的点赞支持!
[哈哈][抱拳]

23种设计模式【创建型模式】详细介绍之【建造者模式】-LMLPHP
加油!

共同努力!

Keafmd

感谢支持牛哄哄的柯南,期待你的三连+关注~~

keep accumulate for my dream【共勉】

                                                       ↓   ↓   ↓   ↓   ↓   ↓  

10-26 23:16