package com.github.yuriyao.FLRMI.FLRMIAL;
import java.util.ArrayList;
import java.util.List;
/**
* 目标服务查找器的注册中心
*
* @author fengjing.yfj
* @version $Id: TargetFinderCenter.java, v 0.1 2014年1月28日 上午10:41:40 fengjing.yfj Exp $
*/
public abstract class TargetFinderCenter {
/** 所有的服务查找器 */
private static final List<ServiceFinder> finders = new ArrayList<ServiceFinder>();
/** 内置的服务查找器 */
private static final String INTENAL_FINDERS[] = { "com.github.yuriyao.FLRMI.FLRMIALImpl.FLRMIServiceFinder" };
//注册所有的内置的查找器
static {
for (String string : INTENAL_FINDERS) {
try {
Class.forName(string);
} catch (Exception e) {
//忽略异常
}
}
}
/**
* 注册服务查找器
*
* @param finder
*/
public static synchronized void registerFinder(ServiceFinder finder) {
if (!finders.contains(finder)) {
finders.add(finder);
}
}
/**
* 注销服务查找器
*
* @param finder 查找器
*/
public static synchronized void unregisterFinder(ServiceFinder finder) {
finders.remove(finder);
}
/**
* 根据目标对象查找对应的服务查找器
*
* @param target 目标对象
* @return 获取对应的服务查找器
*/
public static synchronized ServiceFinder getFinder(Object target) {
for (ServiceFinder finder : finders) {
if (finder.accept(target)) {
return finder;
}
}
return null;
}
}