目 录CONTENT

文章目录

设计模式之建造者模式

在等晚風吹
2023-12-18 / 0 评论 / 0 点赞 / 18 阅读 / 0 字 / 正在检测是否收录...

设计模式之建造者模式

建造者模式(Builder Pattern)是一种创建型设计模式,它允许你创建一个复杂对象的表示,同时隐藏了构建过程的细节。这种模式允许同样的构建过程创建不同的表示。

概念

建造者模式的核心思想是将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。通常,一个产品有多个部分,而构建过程相对复杂,这时候就可以使用建造者模式来实现。

建造者模式包括以下几个角色:

  1. 产品(Product):需要被构建的复杂对象,包含多个部分。
  2. 抽象建造者(Builder):声明构建产品各个部分的抽象接口。
  3. 具体建造者(ConcreteBuilder):实现抽象建造者接口,负责构建产品的具体部分。
  4. 指挥者(Director):调用具体建造者来构建产品的各个部分,形成一个完整的产品。

原理

建造者模式的原理是通过指挥者控制具体建造者的构建过程,从而实现产品的构建。具体建造者负责构建产品的每个部分,而产品的表示则由产品自身来定义。

实现方式

1. 基本建造者模式

// 产品
class Product {
    private String part1;
    private String part2;

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

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

    @Override
    public String toString() {
        return "Product [part1=" + part1 + ", part2=" + part2 + "]";
    }
}

// 抽象建造者
interface Builder {
    void buildPart1();

    void buildPart2();

    Product getResult();
}

// 具体建造者
class ConcreteBuilder implements Builder {
    private Product product = new Product();

    @Override
    public void buildPart1() {
        product.setPart1("Part1");
    }

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

    @Override
    public Product getResult() {
        return product;
    }
}

// 指挥者
class Director {
    public Product construct(Builder builder) {
        builder.buildPart1();
        builder.buildPart2();
        return builder.getResult();
    }
}

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

这个例子中,产品是一个包含两个部分的对象。抽象建造者定义了构建产品各个部分的接口,具体建造者实现了这些接口,负责构建具体的产品部分。指挥者负责调用具体建造者的方法来构建产品。最后,客户端通过指挥者构建产品。

2. 使用内部静态类的建造者模式

// 产品
class Product {
    private String part1;
    private String part2;

    private Product() {
    }

    // Getter methods

    @Override
    public String toString() {
        return "Product [part1=" + part1 + ", part2=" + part2 + "]";
    }

    // 静态内部建造者类
    static class Builder {
        private Product product = new Product();

        public Builder buildPart1(String part1) {
            product.part1 = part1;
            return this;
        }

        public Builder buildPart2(String part2) {
            product.part2 = part2;
            return this;
        }

        public Product getResult() {
            return product;
        }
    }
}

// 客户端
public class BuilderPatternExample {
    public static void main(String[] args) {
        Product product = new Product.Builder()
                .buildPart1("Part1")
                .buildPart2("Part2")
                .getResult();

        System.out.println(product);
    }
}

在这个例子中,产品的构造方法是私有的,通过使用静态内部建造者类,我们可以保持产品的不可变性,并且在构建产品时使用流式接口的方式,使得代码更加清晰。

结语

建造者模式通过将一个复杂对象的构建过程分解为多个简单的步骤,使得构建过程更加灵活,同时也提高了代码的可读性和可维护性。在实际开发中,建造者模式常常用于构建具有多个可选参数的对象,或者构建过程比较复杂的对象。希望本文的介绍能够帮助你更好地理解和使用建造者模式。

0

评论区