Effective Java 第一条:考虑用静态工厂方法代替构造器
2014-04-14 15:05
561 查看
优势:
第一条:静态工厂方法有名称,可以从名字看出方法的作用,容易使用。
第二条:不必每次调用都创建一个新对象。
第三条:静态工厂方法可以返回原类型的任何子类型的对象。
第四条:在创建参数化类型的实例的时候,他们是代码变得更加简洁。
缺点:
第一条:类如果没有共有的或者受保护的构造器,就不能被子类化。
第二条:他们与其他的静态方法实际上没有任何区别。这样在API文档里难于查明如何实例化一个类。
一个简单实现:
第一条:静态工厂方法有名称,可以从名字看出方法的作用,容易使用。
第二条:不必每次调用都创建一个新对象。
第三条:静态工厂方法可以返回原类型的任何子类型的对象。
第四条:在创建参数化类型的实例的时候,他们是代码变得更加简洁。
缺点:
第一条:类如果没有共有的或者受保护的构造器,就不能被子类化。
第二条:他们与其他的静态方法实际上没有任何区别。这样在API文档里难于查明如何实例化一个类。
一个简单实现:
public interface Service{ } public interface Provider { } 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(String name, Provider p){ registerProvider(DEFAULT_PROVIDER_NAME); } 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(); } }
相关文章推荐
- Effective Java 第一条:考虑用静态工厂方法代替构造器
- Effective java第一条:考虑用静态工厂方法代替构造器
- [Effective Java]考虑用静态工厂方法代替构造器
- 《Effective Java》-考虑用静态工厂方法代替构造器
- 《Effective Java》考虑用静态工厂方法代替构造器
- Effective Java记录1:考虑用静态工厂方法代替构造器
- 第一条:考虑用静态工厂方法代替构造器-----静态工厂方法讲解
- 《Effective Java》--01.考虑用静态工厂方法代替构造器
- 第一条:考虑使用静态工厂方法代替构造器
- 1、考虑用静态工厂方法代替构造器(effective java)
- Effective Java 中文版之学习 第1条:考虑用静态工厂方法代替构造器
- 第一条:考虑用静态工厂方法代替构造器
- 第一条:考虑用静态工厂方法代替构造器
- 创建和销毁对象 第一条:考虑用静态工厂方法代替构造器
- 第一条:考虑用静态工厂方法代替构造器
- Effective Java (1) - 考虑用静态工厂方法代替构造器
- Effective Java 创建和销毁对象 1.考虑用静态工厂方法代替构造器
- 第一条:考虑用静态工厂方法代替构造器
- Effective Java 第一条:考虑用静态工厂方法替代构造器
- Effective Java(1)考虑静态工厂方法代替构造器