5分钟聊聊建造者模式

2024-08-13 09:04:00 浏览数 (1)

在软件设计中,面对那些结构复杂、构建过程繁琐的对象时,建造者模式(Builder Pattern)提供了一种高效、灵活的解决方案。建造者模式通过将对象的构建过程与表示分离,使得同样的构建过程可以创建不同的表示。本文将深入探讨建造者模式的基本概念、结构及其应用,特别是如何通过建造者模式生成复杂的对象,如飞船(AirShip)等。

建造者模式概述

建造者模式是一种创建型设计模式,适用于构建复杂对象的场景。它将对象的构建过程与表示分离,使得同样的构建过程可以生成不同的表示。建造者模式由三个主要角色组成:

  1. 产品(Product):代表最终构建的复杂对象。在我们的示例中,AirShip 类就是产品,具有多个组件,如引擎(Engine)、机舱(Cabin)和逃生舱(Excape)。
  2. 建造者(Builder):定义创建产品的抽象接口,声明了创建产品各个部件的方法。AirShipBuilder 接口就是建造者的抽象类,声明了如何创建 EngineCabinExcape
  3. 指挥者(Director):负责按照特定的顺序调用建造者的方法来创建产品。SxtDirector 类作为具体的指挥者,定义了构建飞船的标准流程。

建造者模式的结构和实现

在建造者模式中,产品通常具有复杂的内部结构,构建过程需要按照一定的顺序进行。以下是建造者模式的代码实现示例:

产品类

代码语言:java复制
public class AirShip {
    private Engine engine;    // 发动机
    private Cabin cabin;      // 机舱
    private Excape excape;    // 逃生舱

    // Getter 和 Setter 方法
    public Engine getEngine() { return engine; }
    public void setEngine(Engine engine) { this.engine = engine; }
    public Cabin getCabin() { return cabin; }
    public void setCabin(Cabin cabin) { this.cabin = cabin; }
    public Excape getExcape() { return excape; }
    public void setExcape(Excape excape) { this.excape = excape; }
}

class Engine {
    String name;
}

class Cabin {
    String name;
}

class Excape {
    String name;
}

建造者接口

代码语言:java复制
public interface AirShipBuilder {
    Engine createEngine();
    Cabin createCabin();
    Excape createExcape();
}

具体建造者

代码语言:java复制
public class SxtAirShipBuilder implements AirShipBuilder {
    @Override
    public Engine createEngine() {
        System.out.println("Engine is being built");
        return new Engine();
    }

    @Override
    public Cabin createCabin() {
        System.out.println("Cabin is being built");
        return new Cabin();
    }

    @Override
    public Excape createExcape() {
        System.out.println("Excape is being built");
        return new Excape();
    }
}

指挥者接口

代码语言:java复制
public interface Director {
    AirShip createAirship();
}

具体指挥者

代码语言:java复制
public class SxtDirector implements Director {
    private AirShipBuilder builder;

    // 构造函数注入建造者
    public SxtDirector(AirShipBuilder builder) {
        this.builder = builder;
    }

    @Override
    public AirShip createAirship() {
        AirShip ship = new AirShip();
        ship.setCabin(builder.createCabin());
        ship.setEngine(builder.createEngine());
        ship.setExcape(builder.createExcape());
        return ship;
    }
}

客户端代码

代码语言:java复制
public class BuilderDemo {
    public static void main(String[] args) {
        AirShipBuilder builder = new SxtAirShipBuilder();
        Director director = new SxtDirector(builder);
        AirShip airship = director.createAirship();
        // 使用构建好的飞船
    }
}

优点一览

建造者模式通过将对象的构建过程与表示分离,提高了构建复杂对象的灵活性、可维护性和效率。以下是建造者模式的主要优势概览:

优势

说明

解耦构建过程

将对象构建过程与对象表示分离,客户端不需了解构建细节,简化了系统的维护和扩展。

灵活性和可扩展性

允许通过不同的建造者实现创建不同配置的对象,添加新建造者或修改现有建造者时对系统影响最小。

标准化构建过程

通过指挥者规范化构建步骤,确保每次构建的过程一致,提升了产品的一致性和质量。

支持复杂对象

适合构建具有多个部件和复杂依赖关系的对象,通过分步骤构建保证每个部件的正确性和对象的整体一致性。

总结

建造者模式通过将对象的构建过程与表示分离,提供了一种高效、灵活的解决方案来创建复杂的对象。它通过定义建造者和指挥者,确保了复杂对象的构建过程标准化和一致性。无论是在创建飞船这样的复杂产品,还是其他具有复杂内部结构的对象,建造者模式都能显著提高开发效率,减少错误,并提升代码的可维护性。通过合理应用建造者模式,开发者可以在面对复杂对象时实现更清晰、更高效的构建流程。


我是努力的小雨,一名 Java 服务端码农,潜心研究着 AI 技术的奥秘。我热爱技术交流与分享,对开源社区充满热情。同时也是一位掘金优秀作者、腾讯云创作之星、阿里云专家博主、华为云云享专家。

0 人点赞