• Effective01:考虑用静态工厂方法去代替构造器
  • 发布于 1个月前
  • 35 热度
    0 评论

示例代码:

标准的单例模式每次获取单例对象的时候并不是去new而是通过公有的静态工厂方法getInstance( )去获取单例对象。具体请查看关于单例模式的代码:http://www.dalbll.com/Group/Topic/DesignPatterns/5444


比较对象

静态工厂方法 和 构造器 

静态工厂方法的优势


  1. 存在正确的名称。构造器因为参数顺序的不同可以用来表示不同的对象意义。而静态工厂方法则依据业务逻辑来确定不同的工厂方法,从而不同的静态工厂方法去提供不同的服务。避免了构造器因为顺序不同而依赖API去导致开发人员用错。
  2. 不用每次调用的时候都去创建对象。单例模式完美表现了这一特性。
  3. 可以返回原返回类型的任何子类型的对象。例如JDBC的API。不同的数据库去实现同一个连接服务,JDBC为连接服务去提供多个实现,不同数据库只要修改些许包以及对应的连接链接即可,从而实现了解耦。
  4. 对于拥有多种泛型的实例对象化的时候,可以使得代码更加简洁。如:
    Map<String, List<String>> mapList = new HashMap()<String, List<String>>;
    当泛型的类型更加复杂的时候岂不是很麻烦,如果我们采取下列措施呢?在HashMap中声明此方法。
    public static <K, V> HashMap <K, V> getInstance() {
        return new HashMap<K, V>();
    }
    得到一个map实例不是及其简单了。
    Map<String, List<String>> mapList = HashMap.getInstance();



静态工厂方法的缺点


  1. 如果类构造器是私有的便不能被子类实例化。比如单例中将构造器声明为private的原因就在此。缺点还是优点看使用的条件和场景。
  2. 与其他静态方法没有任何区别。API中关于静态工厂方法和静态方法的声明和注释没有特殊区分。不过自己平时写代码则可以将注释中细写。同样看场景。
:不同场景使用不同的方法,首先要明白各自使用的场景才能在代码中体现出来。切忌第一反应就是构造器而不是静态工厂方法。


用户评论