import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
public final class ServiceLocator {
private static ServiceLocator sl = new ServiceLocator();
private Context c;
private Map m;
private ServiceLocator() {
try {
c = new InitialContext();
m = Collections.synchronizedMap(new HashMap());
} catch (Exception ex) {
throw new ExceptionInInitializerError(ex);
}
}
public static ServiceLocator getInstance() {
return sl;
}
public DataSource getDataSource(String name) throws NamingException {
DataSource ds = null;
if (m.containsKey(name)) {
ds = (DataSource) m.get(name);
} else {
ds = (DataSource) c.lookup(name);
m.put(name, ds);
}
return ds;
}
}
Service Locator Pattern
將取得服務的方法進行封裝, 可降低程式碼間的耦合度
0 comments:
Post a Comment