• Effective Java之创建和初始化对象


    重载构造方法

    
    public class CreateObject1 {
    
        private String name;
    
        private String sex;
    
        private Integer age;
    
        private String addr;
    
        
        public  CreateObject1(String name,String sex) {
            this(name, sex, 0, null);
        }
        
        public CreateObject1(String name,String sex, Integer age) {
            this(name, sex,age, null);
        }
    
        public  CreateObject1(String name, String sex,Integer age, String addr) {
             this.name = name;
             this.sex  = sex;
             this.age  = age;
             this.addr = addr;
        }
    
    
    }
    

    调用情况

    CreateObject1 createObject1 = new CreateObject1("白羽流光", "男", 26, "杭州市");
    

    这种方式初始化和创建对象是我们在平时工作中经常用的,但是一旦增加更多的字段就会变得很难维护也很麻烦。而且这种创建方式比较难阅读,很多情况下我们无法一眼可以知道各个参数的含义

    JavaBean模式

    public class CreateObject2 {
    
        private String name;
    
        private String sex;
    
        private Integer age;
    
        private String addr;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getSex() {
            return sex;
        }
    
        public void setSex(String sex) {
            this.sex = sex;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
        public String getAddr() {
            return addr;
        }
    
        public void setAddr(String addr) {
            this.addr = addr;
        }
    
    }
    
    

    调用情况

            CreateObject2 createObject2 = new CreateObject2();
            createObject2.setName("白羽流光");
            createObject2.setSex("男");
            createObject2.setAge(26);
            createObject2.setAddr("杭州市");
    

    这种方式创建实例很容易也更方便阅读了,但是因为构造过程被分到了几个调用,这样创建一个对象其他函数可以获得对象后通过set进行篡改这个对象里的值,非常得不安全。

    Builder 模式

    public class CreateObject3 {
    
        private String name;
    
        private String sex;
    
        private Integer age;
    
        private String addr;
    
        public static class Builder {
    
            private String name;
    
            private String sex;
    
            //可变的附上初始化值
            private Integer age = 0;
    
            private String addr = null;
    
            public Builder(String name, String sex) {
                this.name = name;
                this.sex  = sex;
            }
    
            public Builder age(Integer var) {
                age = var;
                return  this;
            }
    
            public Builder addr(String var) {
                addr = var;
                return this;
            }
    
            private CreateObject3 build(){
                return new CreateObject3(this);
            }
    
        }
    
        public CreateObject3(Builder builder) {
            this.name = builder.name;
            this.sex  = builder.sex;
            this.age  = builder.age;
            this.addr = builder.addr;
        }
    
    }
    

    调用情况

            CreateObject3 createObject3 = new CreateObject3.Builder("白羽流光", "男").age(26).addr("杭州市").build();
    

    这个模式兼顾了可读性,也比较安全,后续无法改变对象中的属性值。

  • 相关阅读:
    关于Tomcat启动时报The APR based Apache Tomcat Native library which allows optimal performanc e in production environments was not found on the java.library.path
    Java线程池的实现
    搜索引擎关键字智能提示的一种实现
    python简单的爬虫,网页图片
    HDU2065 指数型母函数
    HDU2063 二分图最大匹配问题
    HDU2067 卡特兰数
    HDU2068 错排
    HDU2082 普通型母函数
    ZOJ3798 Abs Problem
  • 原文地址:https://www.cnblogs.com/yantt/p/effective-java-zhi-chuang-jian-he-chu-shi-hua-dui.html
Copyright © 2020-2023  润新知