• 【代码优化】当许多构造函数的参数,请考虑使用builder模式


    静态工厂和构造具有共同的局限性:我们不能扩展到大量的非常好的可选参数。

    1、对于多个可选參数的构造器。我们都习惯採用重叠构造器模式。比方一个參数的构造器调用2个參数的构造器。
        2个參数的构造器调用3个參数的,以此类推。
    public class User{

        private int id。
        private String name。
        private String age。
        private String sex。
        
        public User(int id){
            this(id,null);
        }

         public User(int id,String name){
            this(id,name,null);
        }
         public User(int id,String name,String age){
            this(id,name,age,null);
        }

    }

    当參数足够多的时候,这样的就重叠调用模式就非常难编写。而且非常难阅读。

    2、 取代方法。使用javaBean模式。仅仅要调用一个无參构造器创建对象,然后调用setter方法设置每一个必要的參数


    public class User{

        private int id。
        private String name;
        private String age;
        private String sex。
        
      public User() {}
        //setters
        public void setId (int value){ id= value;}
        public void setName (String value){ name= value;}
        public void setAge (String value){ age= value;}
        public void setSex (String value){ sex= value;}

    }

    这个javaBean模式弥补了重叠构造器繁琐的调用的。可是。遗憾的是javaBean自身有严重的缺点:由于构造过程被分到
    几个构造project中的javaBean可能是不一致的状态,也就是没法保证线程安全性。

    3、 第三种取代方式,既能像重叠构造器那样的安全性。也能够有javaBean那样的可读性。那就是使用Builder模式。

    public class User{

        private int id;
        private String name。
        private String age。
        private String sex;
        
      public User(Builder builder) {
                id= builder.id;
                name=builder.name;
                age=builder.age;
                sex=builder.sex;
        }
       
        
        public Builder(int id){
            this.id=id;
        }
        
         public Builder   setName(String val){
            this.name=val;
            return this;
        }
         public Builder   setAge(String val){
            this.age=val;
            return this;
        }
         public Builder   setSex(String val){
            this.sex=val;
            return this;
        }

        
    }

    总之,假设构造器或者静态工厂中具有非常多參数,使用builder模式是不错的选择。




















    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    ThreadLocal的魔数为什么是0x61c88647?
    java流程控制之 高级for循环
    java流程控制之 for循环 九九乘法表
    java流程控制之 while循环 1到1000中能被5整除的数 按3个数据一行输出
    java流程控制之 for循环 1到1000中能被5整除的数 按3个数据一行输出
    java流程控制之 for循环 1到100的奇偶数和
    java流程控制之 while 循环
    java流程控制之 while 循环 1到100的和
    java流程控制之 switch
    java流程控制之顺序结构
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4717197.html
Copyright © 2020-2023  润新知