建造者模式(Builder Pattern)

建造者模式(Builder Pattern)

    • 1、类型
    • 2、定义
    • 3、UML图
    • 4、四个角色
    • 5、代码
    • 6、应用场景

1、类型

创建型
解释:设计模式的创建性类型是一种软件设计模式,它专注于对象的创建机制,帮助我们更加灵活地创建对象实例。创建性设计模式主要关注如何更好地创建对象,以及如何将对象与其创建方式分离,从而使系统更加灵活、可扩展和易于维护。

常见的创建性设计模式包括:

  • 工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定实例化哪个类。这样在不改变该类的用户的情况下,可以修改实例化的具体类。

  • 抽象工厂模式(Abstract Factory Pattern):提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

  • 建造者模式(Builder Pattern):将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。

  • 单例模式(Singleton Pattern):确保一个类只有一个实例,并提供一个全局访问点。

  • 原型模式(Prototype Pattern):用于创建重复的对象,同时又能保证性能。

2、定义

创建者模式又叫建造者模式,是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。创建者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加以抽象,通过子类继承或者重载的方式,动态的创建具有复合属性的对象

何时使用:一些基本部件不会变,而其组合经常变化的时候。

3、UML图

建造者模式(Builder Pattern)_第1张图片

4、四个角色

  1. Product(产品角色): 一个具体的产品对象。

  2. Builder(抽象建造者): 创建一个Product对象的各个部件指定的接口/抽象类。

  3. ConcreteBuilder(具体建造者): 实现接口,构建和装配各个部件。

  4. Director(指挥者): 构建一个使用Builder接口的对象。它主要是用于创建一个 复杂的对象。它主要有两个作用,一是:隔离了客户与对象的生产过程,二是:负责控制产品对象的生产过程。

5、代码

// 产品角色
@Data
@ToString
public class Product {
    /**
     * 名称
     */
    private String name;
    /**
     * 价格
     */
    private Integer price;
}
// 抽象建造者
public abstract class Builder {


    public abstract void setProductName();

    public abstract void SetProductPrice();

    public abstract Product createProduct();

}
// 具体建造者1
public class ProductOne extends Builder {
    public Product product=new Product();

    public void setProductName() {
        this.product.setName("产品1");
    }

    public void SetProductPrice() {
        this.product.setPrice(100);
    }

    public Product createProduct() {
        return this.product;
    }

}
// 具体建造者2
public class ProductTwo extends Builder {
    public Product product = new Product();

    public void setProductName() {
        this.product.setName("产品2");
    }

    public void SetProductPrice() {
        this.product.setPrice(200);
    }

    public Product createProduct() {
        return this.product;
    }
}
//指挥者
public class Director {
    Builder builder;

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

    public Product assemble() {
        this.builder.setProductName();
        this.builder.SetProductPrice();
        return this.builder.createProduct();
    }
}
// 客户端
public class Client {
    public static void main(String[] args) {

        Director director = new Director(new ProductOne());
        Product product = director.assemble();
        System.out.println(product);


        Director director1 = new Director(new ProductTwo());
        Product product1 = director1.assemble();
        System.out.println(product1);
    }
}

6、应用场景

  • 创建复杂对象:当需要创建一个复杂的对象,该对象拥有多个组成部分(例如具有多个属性或配置选项)且这些组成部分之间存在特定的创建顺序或依赖关系时,建造者模式可以很好地解决这种情况。

  • 需要创建不同表示的对象:如果希望在创建过程中能够灵活地控制对象的创建过程,以便根据不同的需求创建不同表示的对象,建造者模式是一个很好的选择。

  • 创建过程需要隔离:在某些情况下,我们希望将对象的构建过程与其最终表示分离开来,以便能够更加灵活地控制对象的创建过程。建造者模式正是为此而设计的。

  • 需要避免构造器参数过多:当一个类的构造函数参数过多或者存在多个重载的构造函数时,可以考虑使用建造者模式,通过链式调用的方式,使得参数设置更加清晰、易读。

你可能感兴趣的:(设计模式,建造者模式)