package staticTest;

public interface Service {


}

package staticTest;

public interface Provider {
Service newService();
}

package staticTest;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public class Services {

private Services(){};

private static final Map<String,Provider>providers=new
ConcurrentHashMap<String,Provider>();

public static final String DEFAULT_PROVIDER_NAME="<def>";

public static void registerDefaultProvider(Provider p){
registerProvider(DEFAULT_PROVIDER_NAME,p);
}

private static void registerProvider(String name, Provider p) {
providers.put(name, p);
}

public static Service newInstance(){
return newInstance(DEFAULT_PROVIDER_NAME);
}

private 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();
}
}