建造者模式(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图
4、四个角色
-
Product
(产品角色): 一个具体的产品对象。 -
Builder
(抽象建造者): 创建一个Product对象的各个部件指定的接口/抽象类。 -
ConcreteBuilder
(具体建造者): 实现接口,构建和装配各个部件。 -
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、应用场景
创建复杂对象:当需要创建一个复杂的对象,该对象拥有多个组成部分(例如具有多个属性或配置选项)且这些组成部分之间存在特定的创建顺序或依赖关系时,建造者模式可以很好地解决这种情况。
需要创建不同表示的对象:如果希望在创建过程中能够灵活地控制对象的创建过程,以便根据不同的需求创建不同表示的对象,建造者模式是一个很好的选择。
创建过程需要隔离:在某些情况下,我们希望将对象的构建过程与其最终表示分离开来,以便能够更加灵活地控制对象的创建过程。建造者模式正是为此而设计的。
需要避免构造器参数过多:当一个类的构造函数参数过多或者存在多个重载的构造函数时,可以考虑使用建造者模式,通过链式调用的方式,使得参数设置更加清晰、易读。