用静态工厂方法代替构造函数
2012-03-28 21:18
127 查看
package EffectiveJava; import java.util.HashMap; import java.util.Map; import static java.lang.System.out; interface Service{ //里面可以提供操作服务的方法 void say(); } // 提供都接口,其提供一个返回服务的方法 interface Provider{ Service newService();// 返回服务的方法 } class Services{ private Services() {} // 提供一个注册服务、取得 服务的依法 private static Map<String,Provider> providers = new HashMap<String,Provider>(); public static final String DEFAULT = "DEFAULT"; public static void registerProvider(String name,Provider provider) { providers.put(name, provider); } public static Service newInstance(String name) { Provider p = providers.get(name); if(p == null) throw new IllegalArgumentException(name+" not register"); return p.newService(); } public static Service newInstance() { return providers.get(DEFAULT).newService(); } } public class ProviderService { private static Provider CLOSE = new Provider() { // 定义一个provider,用于提供服务 @Override public Service newService() { // 重写provider 接口里的方法 return new Service() { // 返回一个Service接口的匿名内 public void say() { out.println("CLOSE Service alreay loading..."); } }; } }; private static Provider JUMP = new Provider() { public Service newService() { return new Service() { public void say() { out.println("JUMP Service alreay loading..."); } }; } }; public static void main(String argsp[]) { Services.registerProvider("close", CLOSE); Services.registerProvider("jump", JUMP); Services.newInstance("close").say(); Services.newInstance("jump").say(); } } /* * 服务提供者框架 * Service :服务接口 * Provider:提供者接口,用于提供服务,有一个得到服务的方法 * Services:提供服务类,给定String服务名,得到其相应的服务 * 因为是给定String 名,得到相应的服务对象,可以得到反射得到相应的类再实例化,也可以在 * Services 类中维护一个Map<String,Provider> 的映射表,在得到一个服务之前要注册,也就是map.put(String), * 放进注册中,在得到newInstance的时候,再map.get(String) 就行 * 从里面得到相应的Provider,再求得其 * 提供的服务对象 * */
用静态工厂方法代替构造函数的优点
1.不一定要创建对象
2.可以返回指定类型的对象,如果返回集合类时,我们可以返回一个Collection 接口的对象
下面是服务提供者框架:
相关文章推荐
- Item 1:考虑用静态工厂方法代替构造函数
- 静态工厂方法代替构造函数的优缺点
- Effective Java随笔(一) 善于使用静态工厂方法代替构造函数获取实例
- 创建和销毁对象--考虑用静态工厂方法代替构造函数
- [Effective Java] 第1条 考虑用静态工厂方法代替构造函数
- item1:使用静态工厂方法代替构造函数
- [Effective Java] 第1条 考虑用静态工厂方法代替构造函数
- 《Effective Java》: 考虑用静态工厂方法代替构造函数
- java用静态工厂代替构造函数使用方法和优缺点
- 1、考虑使用静态工厂方法代替构造函数。
- Effective Jave——第1条: 考虑用静态工厂方法代替构造函数
- java高效编程一(静态工厂方法代替构造函数)
- Effective Java -- 用静态工厂方法来代替构造器
- 考虑用静态工厂方法代替构造器
- 第1条:考虑用静态工厂方法代替构造器
- 创建和销毁对象(1)——考虑用静态工厂方法代替构造器
- Java中用静态工厂方法代替构造器的优缺点
- 第1条:使用静态工厂的方法来代替构造器
- Effective Java 读书笔记(一):使用静态工厂方法代替构造器
- Effective Java 读书笔记(一):使用静态工厂方法代替构造器