引言
在软件开发中,有时需要构建具有复杂结构的对象,如果直接使用构造函数或者 setter 方法逐个设置对象的属性,会导致代码变得冗长、难以维护,并且容易出错。为了解决这个问题,我们可以使用建造者模式。
一、建造者模式概述
建造者模式是一种创建型设计模式,它的主要目的是将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。这种模式常用于构建具有复杂结构的对象,例如包含多个部件的对象,或者对象的构建过程需要进行多个步骤。
二、建造者模式的结构
建造者模式包含以下几个角色:
- 产品(Product):要构建的复杂对象,它由多个部件组成。
- 抽象建造者(Builder):定义了构建产品的抽象方法,具体建造者类将实现这些方法来构建具体的产品。
- 具体建造者(Concrete Builder):实现了抽象建造者定义的方法,负责构建产品的各个部件,并返回构建后的产品。
- 指挥者(Director):负责使用建造者构建产品的对象,它通常不了解具体的构建过程,只负责按照指定的步骤调用建造者的方法来构建产品。
三、建造者模式的优点
- 分步构建:将构建过程分步进行,每一步都由具体建造者负责,可以更加精细地控制构建过程。
- 隔离复杂性:将构建过程与产品的表示分离,使得构建过程的变化不会影响产品的表示,从而提高了系统的灵活性和可维护性。
- 复用性:可以使用相同的构建过程来构建不同的产品,提高了代码的复用性。
- 逐步完善:可以逐步完善构建过程,根据需求的变化灵活地调整构建过程。
四、建造者模式的应用场景
- 需要构建的产品具有复杂的内部结构,包含多个部件。
- 需要构建的产品的构建过程需要进行多个步骤,并且每个步骤的实现方式可能不同。
- 需要构建的产品的属性之间存在一定的约束关系,需要按照一定的顺序来构建产品。
五、建造者模式的示例代码
我们先来看下相关 UML 图
- 产品角色
package com.markus.desgin.mode.creational.builder;
/**
* @Author: zhangchenglong06
* @Date: 2024/3/7
* @Description:
*/
public class Car {
private Wheel wheel;
private SteeringWheel steeringWheel;
public Wheel getWheel() {
return wheel;
}
public void setWheel(Wheel wheel) {
this.wheel = wheel;
}
public SteeringWheel getSteeringWheel() {
return steeringWheel;
}
public void setSteeringWheel(SteeringWheel steeringWheel) {
this.steeringWheel = steeringWheel;
}
@Override
public String toString(