1. 考虑用静态工厂方法代替构造器
优点 :
public static Boolean valueOf(boolean b){
return b ? Boolean.TRUE : Boolean.FALSE ;
}
- 可返回所有返回类型的子类(静态工厂方法返回类型为接口时 , 可以返回任意实现此接口的类)
- 使得创建实例的方法显得更加简洁
public static <K,V> Map<K,V> newInstance(){
return new HashMap<K,V>();
}
Map<String,List<String>> m = HashMap.newInstance();
缺点 :
- 类如果不含有公有的或者受保护的构造器 , 就不能被子类化 (什么意思 , 没有看懂 (ㄒoㄒ))
- 静态工厂方法和静态方法本质是一样的 . 不容易被发现并使用静态工厂方法来实例化 .
2. 考虑用构建器 ( Builder ) 来代替多参数的构造器
- 重载构造器不方便实例化
- 利用 Builder 方便添加约束条件 ( 在 build 方法的时候抛出 )
- 可以通过一个 Builder 来实例化多个目标对象
3. 使用枚举来实现单例
- 即使进行复杂的序列化和反射也无法多次实例化 ( 保证单例的唯一性 )
public enum Jared{
INSTANCE;
public void method(){ ... }
}
4. 使用私有构造器使类不能被实例化
public class UtilityClass{
private UtilityClass(){
}
}
5. 避免创建不必要的对象
String s = new String("stringette");//创建了多余的String实例
String s = "stringette";//使用此方法复制 , 而非上面的 .
public static void main(String[] args){
Long sum = 0L;//此处使用 Long 声明 sum , 后续处理会自动装箱 , 应该使用 long 声明 .
for ( long i = i ; i < Integer.MAX_VALUE ; i ++ ) {
sum += i ;
}
System.out.println(sum);
}
6. 清除过期的对象引用
7. 避免使用 finalize 方法
- 使用显式的方法终止对象中的资源 , 如 : InputStream中的close方法
- 显式终止方法与try-finally结构结合使用 , 保证终止方法能被调用 .