许多人力推的一本书,真正看了有种相见恨晚的感觉。书中描述了很多平时没有注意到的细节和实现方式
1.考虑用静态工厂代替构造器
优势在于:
1.它们有名称
2.不必在每次调用它们的时候都创建一个新的对象
3.它们可以返回原返回类型的任何子类型的对象
4.在创建参数化类型的实例的时候,它们使代码变得更加简洁
缺点在于:
1.类如果不含公有的或者受保护的构造器,就不能被子类化
2.它们与其他的静态方法实际没有任何区别
惯用名称:
valueOf
of
getInstance
newInstance
getType
newType
2.遇到多个构造器参数时要考虑构建器
package test;
public class NutritionFacts {
private final int servingSize;
private final int servings;
private final int calories;
private final int fat;
private final int sodium;
private final int carbohydrate;
public static class Builder {
private final int servingSize;
private final int servings;
private int calories = 0;
private int fat = 0;
private int sodium = 0;
private int carbohydrate = 0;
public Builder(int servingSize, int servings) {
this.servingSize = servingSize;
this.servings = servings;
}
public Builder calories(int val) {
calories = val; return this;
}
public Builder fat(int val) {
fat = val; return this;
}
public Builder sodium(int val) {
sodium = val; return this;
}
public Builder carbohydrate(int val) {
carbohydrate = val; return this;
}
public NutritionFacts build() {
return new NutritionFacts(this);
}
}
private NutritionFacts(Builder builder) {
servingSize = builder.servingSize;
servings = builder.servings;
fat = builder.fat;
calories = builder.calories;
sodium = builder.sodium;
carbohydrate = builder.carbohydrate;
}
}
如果类的构造器或者静态工厂具有多个参数,设计这种类,Builder模式是不错的选择
3.使用私有构造器或者枚举类型强化Singleton属性
public enum Singleton {
INSTANCE;
}
单元素的枚举类型已经成为实现Singleton的最佳方式
4.通过私有构造器强化不可实例化的能力
java.lang.Math或者java.util.Arrays
5.避免创造不必要的对象
构造器在每次调用的时候都会创建一个新的对象,静态工厂从来不要求这么做
6.消除过期的对象引用
1.只要类自己管理内存,就应该警惕内存泄漏问题
2.缓存
3.监听器和其他回调