设计模式——建造者模式

建造者模式(Builder Pattern)是一种创建型设计模式,它允许通过分步骤来构建复杂对象。该模式的核心原理是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表现形式。

原理

在建造者模式中,通常有以下角色:

  • 抽象建造者(Builder): 定义了创建产品对象的各个部分的接口,并定义了组装产品的具体方法。
  • 具体建造者(ConcreteBuilder): 实现了抽象建造者接口,构造和装配各个部件以创建最终的产品对象。
  • 产品(Product): 是被构建的复杂对象,包含多个可配置的部分。
  • 导演者(Director,可选): 负责协调建造者的工作流程,调用建造者的相关方法来一步步完成产品的构建。

Java代码示例

// 抽象产品类
public abstract class Computer {
    protected String motherboard;
    protected String cpu;
    protected String memory;

    // 其他属性和方法...

    public abstract void buildMotherboard(String motherboard);
    public abstract void buildCpu(String cpu);
    public abstract void buildMemory(String memory);

    public abstract Computer getComputer();
}

// 具体产品类
public class DesktopComputer extends Computer {
    @Override
    public void buildMotherboard(String motherboard) {
        this.motherboard = motherboard;
    }

    @Override
    public void buildCpu(String cpu) {
        this.cpu = cpu;
    }

    @Override
    public void buildMemory(String memory) {
        this.memory = memory;
    }

    @Override
    public Computer getComputer() {
        return this;
    }
}

// 抽象建造者类
public abstract class ComputerBuilder {
    protected Computer computer;

    public ComputerBuilder() {
        computer = new DesktopComputer(); // 或其他实现类
    }

    public abstract void buildMotherboard();
    public abstract void buildCpu();
    public abstract void buildMemory();

    public Computer getComputer() {
        return computer;
    }
}

// 具体建造者类
public class HighEndDesktopBuilder extends ComputerBuilder {
    @Override
    public void buildMotherboard() {
        computer.buildMotherboard("High End Motherboard");
    }

    @Override
    public void buildCpu() {
        computer.buildCpu("Intel Core i9");
    }

    @Override
    public void buildMemory() {
        computer.buildMemory("64GB RAM");
    }
}

// 导演者类(可选)
public class Director {
    private ComputerBuilder builder;

    public Director(ComputerBuilder builder) {
        this.builder = builder;
    }

    public Computer constructComputer() {
        builder.buildMotherboard();
        builder.buildCpu();
        builder.buildMemory();
        return builder.getComputer();
    }
}

// 使用示例
public class Client {
    public static void main(String[] args) {
        ComputerBuilder builder = new HighEndDesktopBuilder();
        Director director = new Director(builder);
        Computer highEndPC = director.constructComputer();
        System.out.println(highEndPC);
    }
}

想象你正在经营一家电脑装配店,客户可以选择定制自己的台式机。抽象建造者就像是一个装配说明书,列出了装机的所有步骤;具体建造者则按照说明书中每一步骤去实际安装主板、CPU和内存等配件;而导演者则是根据客户的订单要求,指挥建造者按正确的顺序进行装配。最后得到的就是一台完全符合客户需求的定制化台式电脑。

应用场景

  • 复杂对象的构建:当一个对象具有多个属性,且不同属性之间有不同的组合方式时,使用建造者模式可以灵活地控制创建过程。
  • 需要生成不同结构或内容的对象系列:例如创建XML或JSON文档,或者创建不同配置选项的产品等。
  • 需要解耦构造过程与表示过程:在不暴露内部细节的情况下,能独立改变产品的内部结构。

适用性

  • 当一个对象的构建过程非常复杂,需要许多步骤并且各步骤间有一定的顺序关系时。
  • 当希望用户只关注结果,而不关心构建过程以及具体的实现细节时。
  • 当需要为对象的不同构造过程提供不同的表示时,即同一构建过程可以产生多种不同表现形式的产品。

你可能感兴趣的:(Java,系列文章,设计模式,建造者模式,java)