effective Java 学习笔记 (一)

来源:互联网 发布:张予曦淘宝店铺不干了 编辑:程序博客网 时间:2024/05/18 10:15

第一条      :考虑用静态工厂方法代替构造函数

类可提供一个共有的静态工厂方法,返回类的一个实例。
 
静态工厂方法优点(与构造函数比较):
1、静态工厂方法具有名字。
当有多个构造函数的时候,如果一个构造函数的参数不能明确的描述被返回对象的特征,则选用适当名字的静态方法可以更易阅读。
 
2、每次被调用的时候,不要求非得创建一个新的对象。
使得一些非可变类可以使用一个预先构造好的实例,或者把已经构造好的实例缓存起来,以后再把这些实例分发给客户,从而避免创建不必要的重复对象。
可以控制“在某一时刻哪些实例应该存在”。这样做的理由:
a.使得一个类可以保证是一个singleton。
b.非可变类可保证不会有两个相等的实例存在。
 
3、可以返回一个原返回类型的子类型的对象。
一个应用是一个API返回一个对象,同时又不使该对象的类成为公有的。这项技术非常适合于基于接口的框架结构。这样使用静态工厂方法可以强迫客户通过接口来引用被返回对象,而不是通过实现类来引用被返回对象。
静态工厂方法返回的对象所属类,在编写包含该静态工厂方法的类时可以并不存在。这种灵活的静态方法构成了服务提供者框架的基础,如Java密码系统扩展(JCE)。
 
静态工厂方法缺点:
1、类如果不含公有的或者受保护的构造函数,就不能被子类化。
对于公有的静态工厂所返回的非公有类,也是如此。
 
2、与其他的静态方法没有任何区别。
两个很流行的静态工厂方法:
valueOf —— 一般是一些非常有效的类型转换操作符。
getInstance —— 返回的实例是由方法的参数来描述的,但不能说与参数具有同样的值。此名字在服务提供者框架中普遍使用。
 

Static: 这个数据或方法不与包含它的那个类的任何对象实例关联在一起。
解决的问题:
1. 只想为特定数据分配一份存储空间,而不去考虑究竟要创建多少对象,甚至不创建对象。
2. 希望某个方法不与包含它的类的任何对象关联到一起,即使没有创建对象,也可以使用这个方法。
 
引用static变量的方法:
1. 通过对象定位
2. 通过类名直接引用
 
Static方法的重要用法是在不创建任何对象的前提下就可以调用它。可以创建或使用与其类型相同的被命名对象,因此,static方法常常拿来做“牧羊人”的觉得,负责看护与其隶属同一类型的实例群。

 
原创粉丝点击