Effective Java 学习笔记 使用静态工厂方法代替构造器

本文探讨了在Java编程中使用静态工厂方法代替构造器的优点,如隐藏构造器、实现单例、命名清晰及返回子类型对象。同时,文章提到了静态工厂方法在处理复杂初始化参数和隐藏实现细节方面的优势,以及它可能导致的无法被子类化的问题。通过具体的场景分析,展示了如何在实际开发中合理利用静态工厂方法。
摘要由CSDN通过智能技术生成

什么是使用静态工厂方法代替构造器:创建一个静态方法,返回值是类的实例

使用静态工厂方法的好处总结:

1.可以隐藏构造方法,把控对象的创建。可以让对象是单例,复用已经有的对象,比如Boolean 

public static final Boolean TRUE = new Boolean(true);

public static final Boolean FALSE= new Boolean(false);

public static Boolean valueOf(boolean b){ return ( b ? TRUE:FALSE) }

Android 开发中使用SharePrefrences可以继承它,然后创建一个静态工厂方法用于创建SharePrefrences的实例,然后每次调用的时候都返回这个实例,实现整个程序在 运行期间只会创建一个实例。

思考:在什么时候会不用构造方法,而是直接使用静态工厂方法。1.对于全局只需要具体数量实例的类可以添加静态工厂方法。

2.静态构造方法的命名比构造方法的命名更加直接醒目,方便调用者去调用适合自己的构造方法。还解决了参数类型列表相同只能有唯一构造方法的限制

思考:什么时候使用静态工厂方法,  初始化参数类型比较复杂,或者说有很多相同类型但是含义不同的参数。可以尝试使用静态工厂方法。这样容易区分和初始化数据。

从名字上就能区分所有的构造方式岂不是更加happy

3.静态构造方法可以返回原返回类型的任何子类型对象。

思考?什么时候会想起来用这个?比如说,有一个排序类,它有几个子排序类继承于它。当我们想通过不同的排序类进行排序的时候,可以通过调用父类的静态构造方 法,这样就可以隐藏子类排序方法的具体实现,同时也隐藏了这个子类。这样方法调用者在使用排序类的时候的方法是很简单的。完全和排序实现解耦。如果不这样做, 客户端要去了解这个基类的所有子类,然后再取筛选用哪个。通过这个方式,客户端开发人员对于咋实现的,完全懵逼。

还有一个比较大的好处,就是向客户端提供API的接口就可能会大规模减少,毕竟没有具体子类的接口了嘛。

4.静态构造方法,它还简化参数类型的声明,这个的效果就是看起来简单点。

有缺点:

1.没有公开或者是受保护的(public || protected)的构造方法,不能子类化。(子类都没法构造了嘛,你就只能使用这个类了。)

2.静态方法,如果放置不好的话,你不太容易发现它,毕竟它只是个普通的静态方法,虽然他可以做一些牛逼的事情。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值