import java.util.*; import java.util.concurrent.*; // Noninstantiable class for service registration and access public class Services { private Services() {} private static final Map providers = new ConcurrentHashMap(); public static final String DEFAULT_PROVIDER_NAME = "Identity"; // Provider registration API public static void registerDefaultProvider(Provider p) { registerProvider(DEFAULT_PROVIDER_NAME, p); } public static void registerProvider(String name, Provider p) { providers.put(name, p); } // Service access API 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(); } }