博客
关于我
设计模式二十三之工厂模式--建造者模式
阅读量:525 次
发布时间:2019-03-08

本文共 1931 字,大约阅读时间需要 6 分钟。

当我们谈论软件设计模式时,建造者模式(Builder Pattern)无疑是一个非常重要且常用的模式。它的核心思想是将一个对象的构造过程与其表示分离开来,使得可以通过不同的建造者,为同一个类创建不同的表示形式。这种方法特别适用于需要复杂构造过程且产品组成部分相对稳定的场景。

建造者模式的优缺点

建造者模式的优点在于可以实现高内聚低耦合。通过将构造逻辑封装在建造者对象中,我们可以在不影响产品的部分实现构造过程的不同之处进行变更和扩展。这种设计方式可以降低代码的复杂度,使得系统更易于维护。

然而,建造者模式也有其缺点。维护成本较高,因为不仅需要管理多个建造者类,还需要确保产物的一致性和完整性。同时,这种模式对于简单对象的构造可能显得有些过度,有时候直接使用简单的工厂模式可能会更为高效。

建造者模式的应用场景

这种设计模式特别适用于需要多种构造方式或复杂构造过程,但产品本身组成部分不变的场景。例如,当我们需要构建一个包含多个组件的复杂对象时,建造者模式可以帮助我们将每个组件的构建过程独立出来,使得系统结构更清晰,灵活性更高。

建造者模式的角色分工

在建造者模式的应用中,主要涉及以下几个角色:

  • 产品(Product):负责最终的产品组成部分,其本身通常由被构造对象负责管理。
  • 抽象建造者(Abstract Builder):提供一个抽象的构造接口,由具体的建造者实现。
  • 具体建造者(Concrete Builder):继承自抽象建造者的具体实现,负责实现特定的构造逻辑。
  • 指挥者(Director):负责协调多个建造者的工作流程,确保最终产品的正确构造。

例如,假设我们需要构建一个汽车,汽车的构造通常包括发动机、轮胎等部件。我们可以通过定义不同的建造者为每个部件提供具体的构造实现,而产品类则负责管理这些部件的组合。这样一来,我们可以轻松地通过延伸建造者类来支持新的车辆类型或部件组合。

一个实际的建造者模式示例

以下是一个简单的汽车构造例子:

public class Car {    private String engine;    private String wheel;    public String info() {        return engine + wheel;    }}

抽象建造者:

public abstract class Manufacturer {    protected Car car = new Car();    public abstract void setEngine();    public abstract void setWheel();    public Car carOne() {        return car;    }}

具体建造者:

public class HzManufacturer extends Manufacturer {    @Override    public void setEngine() {        car.setEngine("宝马发动机");    }    @Override    public void setWheel() {        car.setWheel("宝马轮胎");    }}

指挥者:

@Data@AllArgsConstructorpublic class CarAgentFactory {    private Manufacturer manufacturer;    public Car carOne() {        manufacturer.setEngine();        manufacturer.setWheel();        return manufacturer.carOne();    }}

测试类:

public class BuilderTest {    public static void main(String[] args) {        CarAgentFactory carAgentFactory = new CarAgentFactory(new HzManufacturer());        Car car = carAgentFactory.carOne();        System.out.println(car.info());    }}

通过以上代码,我们可以看到建造者模式的核心思想:将复杂对象的构造过程分解为多个步骤,并通过不同建造者实现不同的构造逻辑,从而使系统具有更高的灵活性和可扩展性。

转载地址:http://cvviz.baihongyu.com/

你可能感兴趣的文章
策略模式
查看>>
c# datagirdview报dataerror请处理等等
查看>>
ubuntu20.04 编译vlc-android
查看>>
VLC/VLC-Android 编译系统说明
查看>>
Swagger2 设置全局token
查看>>
Spring Cloud Gateway 过滤器中直接返回错误结果信息
查看>>
idea Error:java: 错误: 不支持发行版本 5
查看>>
java.io.IOException:Stream closed
查看>>
zookeeper入门
查看>>
CPLEX Python入门--从简单的CplexPythonAPI详解到简单的DoCplex建模
查看>>
JS-button标签说明
查看>>
JS18-DOM操作之标签的样式
查看>>
demo---购物车的多条记录保存(cookie)
查看>>
demo-淘宝输入框搜索
查看>>
数据链路访问
查看>>
scikit-video读写视频
查看>>
参考图像
查看>>
没有为此解决方案配置选中要生成的项目
查看>>
The system is: Windows - 10.0.14393 - AMD64
查看>>
6.3工作日志
查看>>