0. 定义
建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时适用的模式;
简单来说:将对象一步步的组装构建;
罗马不是一天建成的,建造者模式可以一点一点去构建
1. lombok的构建者模式:@Builder
- 实体:
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Order {
private Integer id;
private String name;
private Double price;
private Date time;
}
- lombok的构建者模式:
public class OrderTest {
public static void main(String[] args) {
Order order = Order.builder()
.name("心留时间")
.price(32d)
.id(1)
.time(new Date())
.build();
System.out.println(order);
}
}
2. 自己实现构建者模式
- pojo代码:
package com.xin.demo.pojo.domain;
import java.util.Date;
public class Order {
private Integer id;
private String name;
private Double price;
private Date time;
private Order(OrderBuilder OrderBuilder){
this.id = OrderBuilder.id;
this.name = OrderBuilder.name;
this.price = OrderBuilder.price;
this.time = OrderBuilder.time;
}
public static class OrderBuilder {
private Integer id;
private String name;
private Double price;
private Date time;
public OrderBuilder id (Integer id){
this.id = id;
return this;
}
public OrderBuilder name (String name){
this.name = name;
return this;
}
public OrderBuilder price (Double price){
this.price = price;
return this;
}
public OrderBuilder time (Date time){
this.time = time;
return this;
}
public Order build(){
return new Order(this);
}
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
public Date getTime() {
return time;
}
public void setTime(Date time) {
this.time = time;
}
@Override
public String toString() {
return "Order{" +
"id=" + id +
", name='" + name + '\'' +
", price=" + price +
", time=" + time +
'}';
}
}
- 使用
package com.xin.demo.pojo.domain;
import java.util.Date;
public class OrderTest {
public static void main(String[] args) {
Order order = new Order.OrderBuilder()
.name("心留时间")
.price(32d)
.id(1)
.time(new Date())
.build();
System.out.println(order);
}
}