java的构造者模式(builder)

  我们在工作中写代码会遇到一种情况,就是设置一个对象属性值,通常方式有两种:

1. Animal animal=new Animal("3岁",20kg,"牛奶");
2. Animal animal=new Animal();
   animal.setAge("3岁");
   animal.setWeight("20kg");
   animal.setFood("牛奶");

第一种方式:
  相当于在构造函数里传递参数,但这样加入参数的时候,不能明确的知道往这个对象里加入了什么属性的内容。

第二种方式:
  虽然可以根据set函数名看到将要设置的值是什么值,但是这种写发,略显冗余。

  在设计模式中有构造者模式(builder),在类的构造器或静态工厂具有多个参数。设计这种类时,builder模式就是个不错的选择。Demo代码如下:

public class Purchase {
private final String shipNo;
private final String menuId;
private final String menuName;
private final Double price;

public static class Builder {
    private final String shipNo;
    private String menuId;
    private String menuName;
    private final Double price = 0.0;

    public Builder(String shipNo) {
        this.shipNo = shipNo;
    }

    public Builder menuId(String val) {
        menuId = val;
        return this;
    }

    public Builder menuName(String val){
        menuName=val;
        return this;
    }

    public Purchase build() {
        return new Purchase(this);
    }
}

private Purchase(Builder builder) {
    shipNo = builder.shipNo;
    menuId = builder.menuId;
    menuName = builder.menuName;
    price = builder.price;
}
}

其结果就是这种设置属性是多个方法连接的方式:

  public static void main(String[] args) {
    Purchase p=new Builder("S0001").menuId("11").menuName("宫保").build();
    System.out.println(p.menuName);
    }

也有另一种方式,省去代码的builder写法,就是使用lombok:

import lombok.Builder;
import lombok.Data;

@Builder
@Data
public class LomBokDemo {

    private String name;
    private Integer age;
    public static void main(String[] args) {
        LomBokDemo wyz = LomBokDemo.builder().age(12).name("张三").build();
        System.out.println(wyz);

    }   
}

你可能感兴趣的:(java的构造者模式(builder))