博客
关于我
设计模式二十三之工厂模式--建造者模式
阅读量:524 次
发布时间: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/

你可能感兴趣的文章
Docker镜像加速
查看>>
操作记录-2021-03-15: sunxiaoyu_project
查看>>
Android DEX加固方案与原理
查看>>
Android Retrofit2.0 上传单张图片和多张图片
查看>>
iOS_Runtime3_动态添加方法
查看>>
PNFT邮票数字资产化,科技、美学与价值的完美融合
查看>>
Leetcode第557题---翻转字符串中的单词
查看>>
Problem G. The Stones Game【取石子博弈 & 思维】
查看>>
Unable to execute dex: Multiple dex files
查看>>
Mac电脑调用自带的命令行窗口
查看>>
eclipse自动补全代码(Auto activation只能输3个字符)
查看>>
Java多线程
查看>>
Unity监听日记
查看>>
AndroidStudio跳到错误位置
查看>>
ARFoundation系列讲解-03申请苹果开发者账号
查看>>
木马开发的基本理论基础(五)
查看>>
openssl服务器证书操作
查看>>
expect 模拟交互 ftp 上传文件到指定目录下
查看>>
Matplotlib绘制分组聚合流程图
查看>>
Java 中的多态详解
查看>>