二十三种设计模式-建造者模式

建造者模式(Builder Pattern)是一种创建型设计模式,它提供了一种分步骤构建复杂对象的方法。这种模式允许你通过相同的创建过程构建不同的表示。建造者模式将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的对象。

建造者模式的主要角色

  1. 产品(Product):需要被构建的复杂对象。
  2. 抽象建造者(Builder):一个接口或抽象类,它规定了建造产品的必要步骤。
  3. 具体建造者(Concrete Builder):实现抽象建造者接口,完成产品构建的具体步骤,并提供一个方法返回构建好的产品。
  4. 指挥者(Director):包含客户端代码,负责按照某种顺序调用建造者接口的方法,以指导构建过程。
  5. 客户端(Client):创建具体的建造者对象,然后通过指挥者对象指定的构建步骤来构建复杂对象。

建造者模式的实现步骤

  1. 定义产品类:创建一个包含多个属性和相应setter方法的产品类。
  2. 定义抽象建造者:创建一个包含建造复杂对象步骤的接口或抽象类。
  3. 实现具体建造者:实现抽象建造者接口,定义具体产品的类型。
  4. 实现指挥者:创建一个指挥者类,它接受一个建造者对象,并包含构建复杂对象的方法。
  5. 客户端代码:使用具体建造者对象和指挥者对象来构建产品。

建造者模式的代码示例

复制代码
// 产品类
class Product {
    private String partA;
    private String partB;
    private String partC;

    // 省略getter和setter方法
}

// 抽象建造者
interface Builder {
    void buildPartA();
    void buildPartB();
    void buildPartC();
    Product getResult();
}

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

    public void buildPartA() {
        product.setPartA("PartA");
    }

    public void buildPartB() {
        product.setPartB("PartB");
    }

    public void buildPartC() {
        product.setPartC("PartC");
    }

    public Product getResult() {
        return product;
    }
}

// 指挥者
class Director {
    public void construct(Builder builder) {
        builder.buildPartA();
        builder.buildPartB();
        builder.buildPartC();
    }
}

// 客户端代码
public class BuilderPatternDemo {
    public static void main(String[] args) {
        Builder builder = new ConcreteBuilder();
        Director director = new Director();

        director.construct(builder);
        Product product = builder.getResult();
        // 使用product对象
    }
}

建造者模式的优点

  1. 封装性:建造者模式将产品构建过程封装在建造者类中,使得客户端不需要知道产品内部的构建细节。
  2. 灵活性:客户端可以只通过指挥者类来指导产品的构建,而不需要关心具体的建造逻辑。
  3. 扩展性:新增具体建造者类不会影响其他类,易于扩展新的建造过程。
  4. 解耦:客户端和产品构建逻辑解耦,提高了代码的可维护性。

建造者模式的缺点

  1. 类的个数增多:每增加一个产品,可能需要增加新的建造者类和产品类,导致系统更加复杂。
  2. 对象创建变得复杂:对于简单的对象,使用建造者模式可能会使对象创建过程变得过于复杂。

建造者模式特别适用于创建复杂对象,其中对象的创建过程需要多个步骤,或者对象的创建过程需要灵活多变。这种模式在需要精细控制对象构建过程的场景中非常有用,例如在复杂的XML文档构建、数据库查询构建等场景中。

相关推荐
永卿0014 小时前
设计模式-迭代器模式
java·设计模式·迭代器模式
使二颗心免于哀伤4 小时前
《设计模式之禅》笔记摘录 - 10.装饰模式
笔记·设计模式
Amagi.8 小时前
Java设计模式-建造者模式
java·设计模式·建造者模式
源代码•宸1 天前
深入浅出设计模式——创建型模式之工厂模式
设计模式
天天进步20151 天前
设计模式在Java中的实际应用:单例、工厂与观察者模式详解
java·观察者模式·设计模式
尘似鹤1 天前
c++注意点(12)----设计模式(生成器)
c++·设计模式
归云鹤1 天前
设计模式十:单件模式 (Singleton Pattern)
单例模式·设计模式
夜影风1 天前
23种常用设计模式介绍
设计模式
YoseZang1 天前
【设计模式】GoF设计模式之代理模式(Proxy Pattern)
设计模式·代理模式
hqxstudying1 天前
J2EE模式---业务代表模式
java·前端·python·设计模式·java-ee·mvc