Effective In Java 笔记之创建和销毁对象

创建对象时, 应该优先选用静态工厂方法,其具有以下几个优势:
1. 静态工厂方法与构造器不同之一在于静态工厂方法有名字。
2. 静态工厂方法与工早起不同之二在于静态工厂方法不必在每次调用他的时候都创建一个新的对象。
3. 静态工厂方法与工早起不同之三在于静态工厂方法可以返回该类的任何子类对象。

interface Service {
// specify methods go here
}

interface Provider {
Service newService();
}

public class Services {
private Services() {

}

private static final Map<String, Provider> providers = new ConcurrentHashMap<String, Provider>();
public static final String DEFAULT_PROVIDER_NAME = "<def>";

public static void registerDefaultProvider(Provider p) {
registerProvider(DEFAULT_PROVIDER_NAME, p);
}

public static void registerProvider(String name, Provider p) {
providers.put(name, p);
}

public static Service newInstance() {
return newInstance(DEFAULT_PROVIDER_NAME);
}

public static Service newInstance(String name) {
Provider p = providers.get(name);
if (p == null) {
throw new IllegalArgumentException(
"No provider registered with name: " + name);
}
return p.newService();
}
}

4. 静态工厂方法与工早起不同之四在于创建参数化类型实例的时候, 他们使代码变得更加简洁。
class MyHashMap<K,V>{
public static <K,V> HashMap<K,V> newInstance(){
return new HashMap<K,V>();
}

public static void main(String[] args){
Map<String, List<String>> m = MyHashMap.newInstance();
}
}


静态工厂方法缺点1.类如果不含共有的或者受保护的构造器,就不能被子类化。
2. 它们与其他的静态方法实际上没有任何区别。

总结: 因为我的编码经验不是很多, 个人认为静态构造方法应该用在比较常用的工具类里面,过多的使用静态工厂方法会造成内存泄露问题,详见JDBC驱动注册的源码。请指正。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值