8、【构造者模式】适合于需要创建复杂对象的场景

你好,我是程序员。

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

0c448c536cdb4aa886bfe994bdd41483.png

 

一、是什么?

建造者模式(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、创建不可变对象;

 

总结回顾

85c452d4c6a14d78879a6b5de3c7aee0.png

 

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

构造者模式的优点:

1、封装性好;

2、灵活性高;

3、复用性强;

构造者模式的缺点:

1、类或方法的数量多;

2、构造过程复杂;

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

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

 

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

 

 

 

 

  • 19
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员雪球

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值