Effective Java Chpater 2 Item1 Consider static factory methods instead of constructors

  获得一个类的实例的传统方法是公共的构造方法,还可以提供一个公共的静态工厂方法(一个返回值为该类实例的简单静态方法),

例如Boolean(boolean 的封装类)

  public static Boolean valueOf(boolean b) {

    return b ? Boolean.TRUE : Boolean.FALSE;

  }

此方法将boolean的原始值转变成Boolean对象的引用。

注意:这里的静态工厂方法与设计模式中的工厂方法不一样。静态工厂方法有优缺点。

优点:①与构造方法相比,静态工厂方法有名称。构造方法的参数本身没有描述被返回的对象,这时,静态工厂可以有一个很好的名字,使得使用者很好的阅读和使用。例如构造方法Constructor BigInteger(int, int, Random),返回一个可能是素数的大数,使用工厂方法BigInteger.probalePrime()可以更好的描述,这个方法在java1.4被加入到BigInteger类中。

   ②与构造方法比,静态工厂方法不需要在每次被调用的时候创建新的对象。

   ③可以返回的对象更丰富(返回对象的类或其子类)

   ④根据输入参数的不同,返回对象的类可能因调用而异

     ⑤编写包含该方法的类时,返回的对象的类不必存在?????

缺点:

    ①:类如果不含有公有的或者受保护的构造器,就不能被子类化。

    ②:它们与其他的静态方法实际没有任何区别,不过随着Javadoc工具的完善,丑小鸭会变成白天鹅的

posted @ 2019-01-21 23:01  开发小拉拉  阅读(110)  评论(0编辑  收藏  举报