util.God的局限性:1)仅能够按照默认构造器创建对象;2)仅支持属性配置文件,3)不支持标注。
有同学问,yqj2065.util.God是Martin Fowler文章中的DI还是Service Locator?答:DI。
总体而言,yqj2065比较烦引入太多概念。
【Service Locator模式背后的基本思想是:有一个对象(即服务定位器)知道如何获得一个应用程序所需的所有服务。】
这个概念比较直观,但是”把ServiceLocator类实现为一个Singleton的注册表“等,我懒得看了,服务定位器的实现,简单地想,就有
- 工厂
- ...
- JNDI(Java Naming and Directory Interface)
有同学问,我不想用配置文件,在项目和文件系统之间跑来跑去,好累啊。其实,Netbeans中在项目和文件系统之间跑来跑去,你操作很方便。
ok,不想用配置文件,你把键值对用Map保存就可以了。
package yqj2065.util;
import java.util.HashMap;
import java.util.Map;
/**
*
* @author yqj2065
*/
public class MapLocator implements Locator{
Map<String,String> map = new HashMap<>();
{
map.put("IServer", "init.Server");
}
@Override
public String getValue(String path, String key) {
return map.get(key);
}
}
你的God要变一下:用策略。注意:
public class God {
private static final Locator locator = new MapLocator();
public static String getValue(String path, String key) {
return locator.getValue(path, key);
}
...