effectiveJava(1)静态工厂代替构造器
静态工厂方法优势:
一、静态工厂方法可以提供有意义的名称。当一个类需要多个带有相同签名的构造器时,考虑使用静态工厂方法代替构造器,并慎重地选择名称以便突出他们之间的区别。
二、静态工厂方法不用再每次调用他们的时候都创建一个新对象。对于经常请求创建相同的对象,且创建对象的代价很高情况,可以用该技术极大地提升性能。静态工厂方法能够为重复的调用返回相同对象,
这样有助于类总能严格控制在某个时刻那些实例应该存在。
三、静态工厂方法可以返回原类型的任何子类型的对象。该技术使用于基于借口的框架,因为在这种框架中,接口为静态工厂方法提供了自然返回类型(参考Collections集合方法)。静态工厂方法返回的对象,
在编写包含该静态工厂方法的类时可以不存在。这种静态工厂方法构成了服务者提供者框架(多个服务提供者实现一个服务,系统为服务提供者的客户端提供多个实现,并把它们从多个实现中解耦出来)
四、静态工厂方法在创建参数化类型实例的时候,是代码变得更加简单。
静态工厂方法的缺点:
一、类如果不含有共有的或者受保护的构造器,就不能被子类华
二、它们与其他的静态方法实际上没有任何区别。
静态工厂方法的惯用名称:
valueOf——该方法返回的实例一般与它的参数具有相同的值。这样的工厂方法实际上是类型转换的方法。
of——valueOf的一种更为简洁的替代。
getInstance——返回的实例是通过方法的参数来描述的,但是不能够说与参数具有同样的值。对于Singleton来说,该方法没有参数,并返回唯一的实例、
newInstance——类似getInstance,但newInstance能够确保返回的每个实例都与其他所有实例不同。
getType——类似getInstance但是在工厂方法处于不同中的时候使用。type表示工厂方法所返回的对象类型。
newType——类似newInstance,在工厂方法处于不同的类中使用。type表示工厂方法所返回的对象类型。
浙公网安备 33010602011771号