Effective Java 学习笔记 使用静态工厂方法代替构造器
来源:互联网 发布:手榴弹场地画法及数据 编辑:程序博客网 时间:2024/05/17 22:38
什么是使用静态工厂方法代替构造器:创建一个静态方法,返回值是类的实例
使用静态工厂方法的好处总结:
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.静态方法,如果放置不好的话,你不太容易发现它,毕竟它只是个普通的静态方法,虽然他可以做一些牛逼的事情。
- Effective Java 学习笔记 使用静态工厂方法代替构造器
- [Effective Java]考虑用静态工厂方法代替构造器
- 《Effective Java》-考虑用静态工厂方法代替构造器
- Effective Java -- 用静态工厂方法来代替构造器
- effective java--关于静态工厂方法代替构造器
- Effective Java 中文版之学习 第1条:考虑用静态工厂方法代替构造器
- Effective Java 1:考虑使用静态工厂方法代替构造器
- Effective Java 读书笔记(一):使用静态工厂方法代替构造器
- Effective Java 读书笔记(一):使用静态工厂方法代替构造器
- 《Effective Java》: 考虑用静态工厂方法代替构造函数
- [Effective Java]第一话:使用静态工厂方法代替构造方法
- Java学习笔记1:考虑用静态工厂方法代替构造器
- Java学习笔记1:考虑用静态工厂方法代替构造器
- Effective Java之静态工厂代替构造器(一)
- Effective Java (1) - 考虑用静态工厂方法代替构造器
- Effective Java(1)考虑静态工厂方法代替构造器
- Effective java读书札记第一条之 考虑用静态工厂方法代替构造器
- Effective Java记录1:考虑用静态工厂方法代替构造器
- 使用IntelliJ IDEA开发Java Web项目时,修改了JSP后刷新无效果问题
- Linux 驱动编程初学(一)
- linux env和printenv(环境变量打印)
- 活久见!音乐在AR手里“活”了起来
- Spring源码导入Eclipse中
- Effective Java 学习笔记 使用静态工厂方法代替构造器
- Exception in thread "main" org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Li
- MongoDB学习记录2
- idea各版本
- ubuntu16.10安装docker17.03.0-ce并配置
- 收录一个学习方法-费曼的学习方法
- centos6.4安装tftp服务器
- 最小二乘法直线拟合
- Cookie与Session的区别与联系及生命周期