第一条:考虑用静态工厂方法代替构造函数
优点一: 静态方法可以有具体的名字,使代码更易读,尤其是有多个构造函数时.
优点二: 可以避免创建不必要的重复对象.
例如java中的Boolean类的实现:
package java.lang;
public final class Boolean implements java.io.Serializable,
Comparable<Boolean>
{
public static final Boolean TRUE = new Boolean(true);
public static final Boolean FALSE = new Boolean(false);
public static Boolean valueOf(String s) {
return toBoolean(s) ? TRUE : FALSE;
//......
}
}
优点三: 可以返回对象的子类型,从而迫使用户面向接口编程而非不是面向具体类.
缺点一: 如果不含有public,protected的构造函数,则无法为该类派生子类.(这里不太理解,既然构造函数是私有的,不就是表明不希望它被继承吗?)
缺点二: 无法再文档中被清晰的标明为构造函数.这个缺点可以通过规范的命名来弥补:如valueOf或getInstance都是不错的选择,后者在单例模式中被广泛应用.
第二条 使用私有构造函数强化singleton属性
第三条: 通过私有构造函数使类不可实例化
常用语有很多静态域和静态方法的"工具类".
第四条: 避免重复创造对象,尽可能重复使用一个对象
避免下面会导致重复创建对象的代码:
for(int i=0;i<100;i++)
String s = new String("silly");
改进版本:
for(int i=0;i<100;i++)
String s = "No longer silly";
小结:创建对象是有代价的,但创建小对象的代价并不高,除非你的对象非常heavy,否则不要考虑维护对象池(object pool);
ps:如果对象真的很heavy,可以考虑原型模式~~
第五条 消除过期的对象引用
一旦对象的引用过期,立即清空这些引用.
第六条 避免使用终结函数(finalizer)