先看下面的代码,在平时写Javabean的时候。有可能会有很多个属性,那么在构造这个实例的时候,很可能会因为某些代码比较多,某些属性比较多,容易漏掉一些或者写错,而有些属性是非必须设置的。那么在new对象的时候,可能由于位置没有对应好就容易产生错误。这里推荐使用构造器的方式来对实例进行设置属性。
在这个Java bean中有7个属性,正常来说这7个属性是我们业务中常用的比较多的属性。在这个类中,创建一个public权限的Builder的静态内部类,在这个内部类中,把外部类的属性全部复制出来一份,然后在这个内部类中创建一个构造方法,这里面的Name和Price,分别是在创建这个对象的时候的必要参数。接下来创建一个建造方法。这个建造方法非常特别,它返回了一个外部类的对象,而它的参数就是内部类的对象实力。下面是建造方法,这个建造方法也比较特殊,它每一个建造方法都会返回一个当前的内部类的对象。然后在外部类创建一个构造方法,这个私有的构造方法也非常特殊,它的参数是一个内部类对象,然后,把内部类的对象属性赋值给外部类属性。在使用的时候,在main的方法中,使用方法如下,这样的代码,可读性非常好。
package ch07.p1; /** * 建造者模式(简单版) */ public class BoxBuilder { //required必须参数 private final String Name;//礼盒名称 private final int Price;//礼盒价格 //optional可选参数 private int zz;//粽子 private int xyd;//咸鸭蛋 private int ldg;//绿豆糕 private int yb;//月饼 private int jg;//坚果 //具体建造者 public static class Builder{ //required必须参数 private final String Name;//礼盒名称 private final int Price;//礼盒价格 //optional可选参数 private int zz;//粽子 private int xyd;//咸鸭蛋 private int ldg;//绿豆糕 private int yb;//月饼 private int jg;//坚果 //构造方法 public Builder(String name, int price) { super(); this.Name = name; this.Price = price; } //建造方法 public BoxBuilder builder(){ return new BoxBuilder(this); } public Builder zz(int value){ this.zz=value; return this; } public Builder xyd(int value){ this.xyd=value; return this; } public Builder ldg(int value){ this.ldg = value; return this; } public Builder yb(int value){ this.yb = value; return this; } public Builder jg(int value){ this.jg = value; return this; } } private BoxBuilder (Builder builder){ Name = builder.Name; Price =builder.Price; zz =builder.zz; xyd =builder.xyd; ldg=builder.ldg; yb=builder.yb; jg=builder.jg; } public static void main(String[] args) { BoxBuilder box1 = new Builder("端午节礼盒1",120) .zz(8) .xyd(4) .builder(); } } |