建造者模式
建造者模式 典型的例子就是 lombok 的 builder,将bean对象属性的赋值。 简单使用构造函数传递参数的话,虽然可以定义多个构造函数, 但会造成过多繁琐的代码,切参数位置的交换都是一个新的构造函数。 参数过少就没必要使用建造者模式。 建造者模式的主要作用就是将一个复杂的对象的构建过程简单话, 变成一个个的小步骤。面对多变的参数选择也能够从容应对。
demo
package creationalpattern.builderpattern;
/**
* @author tx
* @version 1.0
* @date 2024/1/6 15:55
* @description:
* 建造者模式
* 典型的例子就是 lombok 的 builder,将bean对象属性的赋值。
* 简单使用构造函数传递参数的话,虽然可以定义多个构造函数,
* 但会造成过多繁琐的代码,切参数位置的交换都是一个新的构造函数。
* 参数过少就没必要使用建造者模式。
* 建造者模式的主要作用就是将一个复杂的对象的构建过程简单话,
* 变成一个个的小步骤。面对多变的参数选择也能够从容应对。
*/
public class BuilderPattern {
public static void main(String[] args) {
/**
* builder自定义创建流程
*/
Builder builder = new Builder(new Product());
Product product = builder.setEvaluate("好评")
.setModel("1.0.0")
.setLife(100)
.setWeight(10)
.setSize(1000)
.build();
System.out.println(product);
}
}
/**
* 建造者
*/
class Builder{
private Product product = null;
public Builder(Product product){
this.product = product;
}
public Product build(){
return product;
}
public Builder setModel(String model){
product.setModel(model);
return this;
}
public Builder setEvaluate(String evaluate){
product.setEvaluate(evaluate);
return this;
}
public Builder setLife(Integer life){
product.setLife(life);
return this;
}
public Builder setSize(Integer size){
product.setSize(size);
return this;
}
public Builder setWeight(Integer weight){
product.setWeight(weight);
return this;
}
}
/**
* 复杂的产品
* 如果这个复杂的产品在使用的过程中只需要使用部分的参数,
* 直接定义构造函数将不太好定义,一个构造函数传入全部的参数虽然能解决问题,
* 但参数数量过的不易于辨识和传递。
* 使用构造函数的话则灵活许多,但也有缺陷,就是产品本身的复杂度上升了。
*/
class Product{
// 型号
private String model;
// 大小
private Integer size;
// 质量
private Integer weight;
// 生命
private Integer life;
// 使用体验反馈
private String evaluate;
public Product() {
}
/**
* 构造函数设置参数 ******************************************************
* @param model
* @param size
* @param weight
* @param life
* @param evaluate
*/
public Product(String model, Integer size, Integer weight, Integer life, String evaluate) {
this.model = model;
this.size = size;
this.weight = weight;
this.life = life;
this.evaluate = evaluate;
}
@Override
public String toString() {
return "Product{" +
"model='" + model + '\'' +
", size=" + size +
", weight=" + weight +
", life=" + life +
", evaluate='" + evaluate + '\'' +
'}';
}
/** ******************************************************
* 分开设置参数
* @return
*/
public String model() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public Integer size() {
return size;
}
public void setSize(Integer size) {
this.size = size;
}
public Integer weight() {
return weight;
}
public void setWeight(Integer weight) {
this.weight = weight;
}
public Integer life() {
return life;
}
public void setLife(Integer life) {
this.life = life;
}
public String evaluate() {
return evaluate;
}
public void setEvaluate(String evaluate) {
this.evaluate = evaluate;
}
}