第1条:用静态工厂方法代替构造函数
如Boolean类中的一个简单的例子:
public static Boolean valueOf(boolean b){
return (b?Boolean.TRUE : Boolean.FALSE);
}
好处有3个:与构造函数不同,静态工厂方法具有名字;每次被调用时不要求非得创建一个新的对象;他们可以返回一个原返回类型的子类型对象。
缺点有2个:类如果不含有公有的或者受保护的构造函数就不能被子类化;与其他静态方法没有任何区别。
第2条:用私有构造函数强化singleton属性
有2种实现方法:
使用公有静态final域:
public class A{
public static final A INSTANCE=new A();
private A(){
}
}
提供一个公有静态工厂方法:
public class B {
private static final B INSTANCE =new B();
private B(){}
public static B getInstance(){
return INSTANCE;
}
}
注意:为了使singleton类变成可序列化的(serializable),只在声明中加上“implements Serializable”是不够的,还必须提供一个readResolve方法。