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

本文探讨了静态工厂方法在实例创建方面的优势,包括方法名的明确性、性能提升、类型灵活性及Spring环境下的适用性;同时也指出了其在继承支持和命名规范方面的局限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

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

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

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

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值