《Effective Java》第1条:考虑用静态工厂方法代替构造器

一:静态工厂方法获取实例相对于构造器的优势

      1. 静态工厂方法有名称:当我们需要多个签名构造器时,在Java中只能够通过调整参数的位置,这样对用户不够友好,而使用静态工厂方法可以避开这个限制,通过不同名称明确的突出多个实例方法的区别。

      2. 使用静态方法不用在每次调用的时候都创建一个实例,这将大大减少性能的损耗。因为多次频繁的创建相同的对象的代价很高。

      在多线程的环境下,如果每个线程需要单独的实例时,使用静态方法会不会导致数据混乱,因为每次的调用都返回同样的对象。

     在Spring的环境中Spring的组件(Bean)默认单例,找这么看是适合使用静态工厂方法的,而且Spring在处理并发时采用ThreadLocal来处理线程同步问题,它的方式是为每个独立的线程提供变量副本,当变量改变时只修改各自的副本,保证安全.所以在Spring中也适合使用静态工厂方法.

     3.静态工厂方法可以返回原返回类型的任何子类型,如此在选择返回类型时有更大的灵活性,而且不会影响消费者的体验.

     4.在创建参数化类型实例时,静态工厂方法可以使代码更加的简洁.

二:静态工厂方法获取实例的缺点

    1.当类不包含public,protect或者default的构造器,那么类将不能够被子类化,如此Java的继承特性将荡然无存.

    2. 该方法与普通的静态方法没有差别,需要根据特定的命名规则来识别.

猜你喜欢

转载自blog.csdn.net/qq_34332035/article/details/81561658
今日推荐