在创建对象是,静态工厂的优势有4个:
1.有名字
probablePrime表示可能的素数
BigInteger bigInteger = BigInteger.probablePrime(3, new Random());
同样的功能,使用构造器就差了可读性
BigInteger bigInteger = new BigInteger(3, 100, new Random());
2.不一定要创建新对象
Boolean b = Boolean.valueOf(false);
3.可以返回子类
Collections可以返回各种对象,他们都指向接口。他们具体实现都在Collections内部。这样他们不需要暴露个用户,拥有极高的灵活性。
下面是Collections 里的一个静态工厂和包私有类
public static <K,V> NavigableMap<K,V> checkedNavigableMap(NavigableMap<K, V> m,
Class<K> keyType,
Class<V> valueType) {
return new CheckedNavigableMap<>(m, keyType, valueType);
}
static class CheckedNavigableMap<K,V> extends CheckedSortedMap<K,V>
implements NavigableMap<K,V>, Serializable