zoukankan      html  css  js  c++  java
  • Effective Java 之-----静态工厂与构造器

    一、 考虑用静态工厂方法代替构造器:

    1)静态工厂方法与构造器不同的第一大优势在于:他们有名称。当一个类需要多个带有相同签名的构造器时,就用静态方法代替构造器,并慎重的选择名称以突出他们间的区别;

    2)静态工厂方法第二大优势: 不必在每次调用他们的时候都创建一个新对象;

    3)静态工厂方法第三大优势: 他们可以返回原返回类型的任何子类型的对象;

    4)静态工厂方法第四大优势: 在创建参数化类型实例的时候,他们使代码变得更整洁;

    5)静态工厂方法缺点一:类如果不含公共的或者受保护的构造器,就不能被子类化;

    6)静态工厂方法缺点二:他们与其他的静态方法没有任何区别;


    二、 遇到多个构造器参数时要考虑用构建器:

    1)第一种方式----重叠构造器:第一个构造器只有必要参数,第二个有一个可选参数,第三个有两个可选参数......最后一个包含所有可选参数。要创建实例的时候,就利用参数列表最短的构造器,但该列表中包含了要设置的所有参数(缺点在于当有许多参数时,客户端代码会很难写,并且仍然难以阅读)

    2)第二种方法----JavaBeans模式:调用一个无参构造器来创建对象,然后调用setter方法来设置每个必要的参数,以及每个相关的必选参数。
    (由于构造过程被分到了几个调用中,在构造过程中JavaBean可能存在不一致的状态,线程安全存在隐患)

    3)Builder模式:不直接生成想要的对象,而是让客户端利用所有必要的参数调用构造器(或静态工厂),得到一个builder对象,然后客户端在builder对象上调用类似setter的方法来设置每个相关的可选参数,最后客户端调用午餐的build方法类生成不可变的对象。newInstance方法总是企图调用类的无参构造器,还会传播由无参构造器抛出的任何异常。

    三、用私有构造器或者枚举类型强化Singleton属性:
    Singleton指仅仅被实例化一次的类,通常用来代表那些本质上唯一的系统组件,实现Singleton有三种方法:

    (1)公有静态成员是个final域,享有特权的用户可以调用AccessibleObject.setAccessible方法,通过反射机制调用私有构造器:

    public class User{
        public static final User INSTANCE = new User();
        private User{
        }
        public void doSomeThing(){...}
    }
    

    (2)公有静态成员是个静态工厂方法:

    public class User{
        public static final User INSTANCE = new User();
        private User{
        }
        public static User getInstance(){ return INSTANCE;}
        public void doSomeThing(){...}
    }
    

    (3)单个元素的枚举类型:

    public enum User{
        INSTANCE;
        public void doSomeThing(){...}
    }    
    

      

     

  • 相关阅读:
    利用jenkins+saltstack+sh 修改nginx配置文件并重新加载
    利用jenkins+saltstack+sh部署项目到多台服务器
    基于9款CSS3鼠标悬停相册预览特效
    基于jquery横向手风琴效果
    基于jQuery图片元素网格布局插件
    基于jQuery左侧大图右侧小图切换代码
    sql2005,sql2008,sql2012清空日志语句
    基于jQuery鼠标悬停上下滑动导航条
    基于jQuery鼠标点击弹出登陆框效果
    纯CSS3悬停图标旋转导航动画代码
  • 原文地址:https://www.cnblogs.com/hunterCecil/p/5621354.html
Copyright © 2011-2022 走看看