如何写出一个优雅的代码第一集~构造器。

先看下面的代码,在平时写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();

    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值