考虑用静态工厂方法替代构造器

public interface Service {

}

//////////////////////////////////////////////////////////////////////////////////////////////////

public interface Provider {
  Service newService();
}

///////////////////////////////////////////////////////////////////////////////////////////////////

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

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

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 register with name: " + name);

  return p.newService();
}

public static void main(String[] args) {
  // TODO Auto-generated method stub
  Service s = newInstance();
  Service sCustomer = newInstance("customer");
}

}

posted @ 2017-11-08 11:19  mzxl1987  阅读(119)  评论(0)    收藏  举报