`

effective java 1

阅读更多
一.NO.1 考虑用静态工厂方法代替构造函数
  静态工厂方法 其实就是一个静态方法,返回的该类的实例。
  优点:
     1.有自己的名字,方便
     2.不用每次调用都创建实例对象,可以定义一个公用的 需要的时候返回就是了。
     3.可以返回该类的子类 作为返回值,也可返回非公有类
       colletions类中有:
       public static Map synchronizedMap(Map map){return new SynchronizedMap(map);}
       然后再该类中定义非public类SynchronizedMap
   缺点:
      1.如果通过静态工厂方法来获得实例,并且类没有公开或者保护的构造函数,那么这个类不能被
        继承。
        因为子类创建构造函数时要先创建父类的构造函数,父类构造函数私有,继承时直接出错
        workeye/src/test/ChildClasstest.java 可证。
      2.静态工厂方法跟其他的静态方法区别不大,这样创建的实例谁又知道这个静态方法是创建实例呢?弥补的办法就是:              静态工厂方法名字使用valueOf或者getInstance.
      3.个人觉得静态方法 还不能被继承 重写 重载,这个也是一个缺点。

    总结:一般来说没有特殊的需求还是用构造函数吧,毕竟这个东西是JDK默认的

发散:
文中提到了工厂方法,工厂方法是设计模式中最简单的一种,有:简单工厂方法,工厂方法,抽象工厂方法三种
见设计模式中具体介绍。


二.试用私有构造函数强化singleton属性
   重点:假如该类实现了serializable接口,那应该重写(override)readResolve()方法,否则再反序列化的时候是会产生         一个新的实例,这与singleton相违背了
 
  三.过私有的构造函数强化不可实例化的能力
     一部分类只有静态的方法,不能定义为抽象类 又没有必要实例化 那么可以将构造函数搞成private的
     和NO.1中一样 这样的类不能被继承

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics