建造者模式
定义:将一个复杂对象的构建和它的表示分离,使得同样的构建过程可以创建不同的表示
适用场景:
- 创建对象需要很多步骤,但是步骤的顺序不一定固定
- 创建的对象有非常复杂的内部结构(很多属性)
- 把复杂对象的创建和使用分离
优点:
封装性好,创建和使用分离
扩展性好,实体和建造类之间一定程度上解耦
缺点:
产生多余的
Builder对象产品内部发生改变,建造者的逻辑也要同步修改,成本较大
链式编程
建造者模式一般会采用链式编程
核心:建造者类持有实体,修改实体属性的方法需要返回自身
以订单为例Order.java
java
@Data
public class Order {
private Integer id;
private String name;
private Double price;
}订单的建造者OrderBuilder.java
java
public class OrderBuilder {
private Order order = new Order();
public OrderBuilder id(Integer id) {
this.order.setId(id);
return this;
}
public OrderBuilder name(String name) {
this.order.setName(name);
return this;
}
public OrderBuilder price(Integer price) {
this.order.setPrice(price);
return this;
}
public Order build() {
return this.order;
}
}使用
java
public class User {
public void static main(String args[]) {
OrderBuilder orderBuilder = new OrderBuilder()
.id(1)
.name("123")
.price(9800);
Order order = orderBuilder.build();
System.out.println(order);
}
}建造者模式在源码中的体现
StringBuilder
StringBuilder中的append方法,每次拼接字符串后会返回自身对象

BeanDefinitionBuilder
Spring中的BeanDefinitionBuilder也使用到了建造者模式,最终通过getBeanDefinition方法返回beanDefinition

建造者模式与工厂模式的区别
- 建造者模式不仅要创建出对象,还需要了解这个对象由哪些部分组成,工厂模式只需要把对象创建出来即可
- 建造者模式可以根据实际需求定制不一样的对象,工厂模式创建出来的对象都是统一的
- 建造者更关注构建过程的定制,工厂模式更关注构建类型的结果