📜  Java中的建造者模式(1)

📅  最后修改于: 2023-12-03 14:42:57.328000             🧑  作者: Mango

Java中的建造者模式

在软件工程中,建造者模式是一种创建型设计模式,它可以用来构造复杂对象。

模式定义

建造者模式是对象创建型模式的一种,它可以将一个复杂对象的创建过程和表示分离,使得同样的创建过程可以构建不同的表示。它简化了复杂对象的创建过程,并且使得客户端不必知道复杂对象的内部实现。

模式结构

建造者模式包含以下角色:

  1. 产品类(Product):一个具体的产品类,包含多个组成部件,其具体构建由Builder完成。
  2. 抽象建造者类(Builder):定义产品的创建接口,具体建造者实现该接口,完成具体的产品构建。
  3. 具体建造者类(ConcreteBuilder):实现Builder接口,构建具体产品。
  4. 指挥者类(Director):负责安排Builder对象的建造过程,产品的构建由具体建造者完成,但是由指挥者指定顺序。
优点
  1. 可以实现对象构建的步骤分离。
  2. 可以使对象的构建过程更加灵活,不同的构建者可以自行控制产品的生成过程。
  3. 可以隐藏产品的内部细节,使得客户端不必知道产品的内部实现。
示例代码

以下是一个简单的建造者模式示例代码:

/**
 * 产品类
 */
class Product {
    private String part1;
    private String part2;
    private String part3;

    public void setPart1(String part1) {
        this.part1 = part1;
    }

    public void setPart2(String part2) {
        this.part2 = part2;
    }

    public void setPart3(String part3) {
        this.part3 = part3;
    }

    @Override
    public String toString() {
        return "Product{" +
                "part1='" + part1 + '\'' +
                ", part2='" + part2 + '\'' +
                ", part3='" + part3 + '\'' +
                '}';
    }
}

/**
 * 抽象建造者类
 */
abstract class Builder {
    Product product = new Product();

    public abstract void buildPart1();

    public abstract void buildPart2();

    public abstract void buildPart3();

    public Product getResult() {
        return product;
    }
}

/**
 * 具体建造者类
 */
class ConcreteBuilder extends Builder {
    @Override
    public void buildPart1() {
        product.setPart1("Part1");
    }

    @Override
    public void buildPart2() {
        product.setPart2("Part2");
    }

    @Override
    public void buildPart3() {
        product.setPart3("Part3");
    }
}

/**
 * 指挥者类
 */
class Director {
    public void construct(Builder builder) {
        builder.buildPart1();
        builder.buildPart2();
        builder.buildPart3();
    }
}

/**
 * 客户端类
 */
public class Client {
    public static void main(String[] args) {
        Director director = new Director();
        Builder builder = new ConcreteBuilder();
        director.construct(builder);
        Product product = builder.getResult();
        System.out.println(product);
    }
}

在上述示例代码中,Product是具体的产品类,Builder是抽象建造者类,ConcreteBuilder是具体建造者类,Director是指挥者类,Client是客户端类。在客户端类中,通过指挥者类调用具体建造者类的方法来构建产品。最后通过调用具体建造者类的getResult()方法获取构建完成的产品。

总结

建造者模式可以使对象的构建过程更加灵活,也可以隐藏产品的内部细节,使得客户端不必知道产品的内部实现。在实际开发中,建造者模式可以用于构建复杂的对象,比如多个步骤的表单、多模块的菜单等。