8、【建造者模式】的优缺点使用场景,代码示例讲解

8、【建造者模式】的优缺点使用场景,代码示例讲解

首页模拟经营我是创造者2更新时间:2024-07-31

你好,我是程序员。

今天我们来学习23种设计模式中的建造者模式。构造者模式是什么?有什么优缺点?使用场景,与工厂模式有什么区别?简单代码实现。

一、是什么?

建造者模式(Builder Pattern)是一种创建对象的设计模式,它将复杂对象的创建过程分解为多个步骤,并将这些步骤封装在独立的建造者类中。通过使用建造者模式,可以将对象的创建过程与对象的具体表示分离开来,从而使得对象的创建过程更加灵活和可复用。

二、构造者模式的优点包括:

1. 封装性好:将复杂对象的创建过程封装在独立的建造者类中,使得对象的创建过程更加清晰和易于理解。

2. 灵活性高:通过使用建造者模式,可以灵活地修改对象的创建过程,而不需要修改对象的具体表示。

3. 可复用性强:建造者模式将对象的创建过程分解为多个步骤,可以将这些步骤封装在独立的建造者类中,从而提高了代码的可复用性。

三、建造者模式的缺点包括:

1. 类的数量增多:由于将对象的创建过程分解为多个步骤,并将这些步骤封装在独立的建造者类中,因此需要创建多个建造者类,从而增加了类的数量。

2. 建造过程复杂:如果对象的创建过程过于复杂,可能会导致建造者类的建造过程也变得复杂,从而增加了代码的维护难度。

四、使用场景:

建造者模式适合于需要创建复杂对象的场景,例如创建汽车、飞机、计算机等复杂对象。在这些场景中,对象的创建过程可能涉及多个步骤和多个部件,使用建造者模式可以将对象的创建过程分解为多个步骤,并将这些步骤封装在独立的建造者类中,从而提高代码的灵活性和可复用性。

五、构造者模式与工厂模式的区别:

工厂模式用来创建一组不同,但相关的对象,比如集成同一父类,或者接口的一组子类,由给定的参数来决定创建哪种类的的对象。

建造者模式是用来创建一种类型的复杂对象,可以通过设置不同的可选参数,定制化创建不同的对象。

六、代码示例:

import java.util.HashMap;

import java.util.Map;

public class Meal {

private String food;

private String drink;

private Map<String, Integer> toppings;

// 构造函数,用于初始化 Meal 对象的属性

public Meal(String food, String drink, Map<String, Integer> toppings) {

this.food = food;

this.drink = drink;

this.toppings = toppings;

}

// 获取食物的方法

public String getFood() {

return food;

}

// 获取饮料的方法

public String getDrink() {

return drink;

}

// 获取配料的方法

public Map<String, Integer> getToppings() {

return toppings;

}

// 显示 Meal 对象信息的方法

public void display() {

System.out.println("Meal: " food ", " drink ", " toppings);

}

// 建造者类,用于构建 Meal 对象

public static class MealBuilder {

private String food;

private String drink;

private Map<String, Integer> toppings = new HashMap<>();

// 设置食物的方法

public MealBuilder setFood(String food) {

this.food = food;

return this;

}

// 设置饮料的方法

public MealBuilder setDrink(String drink) {

this.drink = drink;

return this;

}

// 添加配料的方法

public MealBuilder addTopping(String topping, int quantity) {

this.toppings.put(topping, quantity);

return this;

}

// 构建 Meal 对象的方法

public Meal build() {

return new Meal(food, drink, toppings);

}

}

public static void main(String[] args) {

// 创建 MealBuilder 对象,并使用它来构建 Meal 对象

MealBuilder mealBuilder = new MealBuilder()

.setFood("披萨")

.setDrink("可乐")

.addTopping("芝士", 2)

.addTopping("香肠", 1);

// 使用构建好的 MealBuilder 对象构建 Meal 对象

Meal meal = mealBuilder.build();

// 显示 Meal 对象的信息

meal.display();

}

}

在上述示例中,我们创建了一个 Meal 类来表示餐点,它具有食物、饮料和配料等属性。然后,我们创建了一个 MealBuilder 类来构建 Meal 对象。 MealBuilder 类提供了一系列方法,用于设置食物、饮料和添加配料。最后,在 main 方法中,我们创建了一个 MealBuilder 对象,并使用它来构建一个 Meal 对象。通过调用 build 方法,我们可以得到一个完整的 Meal 对象,并使用 display 方法来显示它的信息。

如果一个类中有很多属性,为了避免构造者函数的参数列表过长,我们可以使用set()方法来解决。如果有以下情况,就要考虑用构造者模式:

1、需要校验多个必填参数;

2、属性之前有依赖关系或者约束条件;

3、创建不可变对象;

总结回顾

建造者模式将复杂对象的创建过程分解为多个步骤,并将这些步骤封装在独立的建造者类或方法。

构造者模式的优点:

1、封装性好;

2、灵活性高;

3、复用性强;

构造者模式的缺点:

1、类或方法的数量多;

2、构造过程复杂;

构造者模式与工厂模式的区别:

工厂模式用来创建一组不同,但相关的对象。建造者模式是用来创建一种类型的复杂对象。

想要了解更多设计模式相关知识,请关注我吧,下期持续更新。

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved