zoukankan      html  css  js  c++  java
  • (一)Builder(建造者)模式

    我们一般在构建javabean的对象的时候通常有三种写法:

      1.直接通过构造函数传参的方式设置属性,这种方法如果属性过多的话会让构造函数十分臃肿,而且不能灵活的选择只设置某些参数。

      2.采用重叠构造区模式,先写第一个只有必要参数的构造器,第二个构造器有一个可选参数,第三个构造器有两个可选参数,以此类推;如果参数比较多时,类里面会出现一堆构造方法,并且阅读困难,很容易就把两个属性参数写颠倒位置了,编译不会出错,但运行就会出错了

      3.采用Javabean 的写法,写一堆属性的setter方法,通过生成对象,让后调用setter方法给属性赋值。  这种方法有个劣势就是构造的过程被分到几个调用中,在构造中可能处于不一致状态,无法保证一致性。

    今天我们可以尝试采用Builder模式的写法:

      

    public class Person {
    
        private String name;
    
        private String address;
    
        private int age;
    
        private int sex;
    
        public Person(Builder builder) {
            this.name = builder.name;
            this.address = builder.address;
            this.age = builder.age;
            this.sex = builder.sex;
        }
    
        public static class Builder{
            private String name;
    
            private String address;
    
            private int age;
    
            private int sex;
    
            public Builder(String name) {
                this.name = name;
            }
    
            public Builder address(String address){
                this.address = address;
                return this;
            }
    
            public Builder age(int age){
                this.age = age;
                return this;
            }
            public Builder sex(int sex){
                this.sex = sex;
                return this;
            }
    
            public Person build(){
                return new Person(this);
            }
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public int getSex() {
            return sex;
        }
    
        public void setSex(int sex) {
            this.sex = sex;
        }
    }
    使用如下:
    Person person = new Person.Builder("张三").address("上海").build();
    Builder 方法是Person中的一个静态内部类,属性和Person中的属性也都一致,所以属性值在Builder中设置,然后通过builder方法构建Person对象。

    采用javaBean 写法的缺点就是, 一但调用 new Person() 构造函数后,对象就被创建了,以后在调用 set 方法设置属性的时候这里设置一下,其他地方又设置一下,无法保证对象的状态一致性,而且代码的可读性很差

    1. Builder 方式创建的对象,在调用 build() 方法之前是不会创建Request 对象的,所有的属性设置都必须在 build() 方法之前,而且创建了 Request 对象后就不可以更改其属性了,这就保证了对象状态的唯一性,而且代码的可读性也提高了。

    2.Builder可以实现类似setter的自由选择参数

  • 相关阅读:
    numpy的shuffle函数
    特征值、特征向量
    keras的Embedding层
    自己写着玩的一个天气APP
    使用mbed进行STM32板子的开发
    提高ListView的效率
    自定义ListView里面的Item的内容
    Android控件使用自定义字体
    使用Handler类来更新UI
    MongoDB在Java下的增删查改
  • 原文地址:https://www.cnblogs.com/lkf-00889/p/7286338.html
Copyright © 2011-2022 走看看