1.通过接口实例化类
Map hashMap=new HashMap(); Map treeMap=new TreeMap(); 如果接口的类越来越多?
2.简单工厂
public class Factory { public static Map creator(int which) { if (which == 1) { return new HashMap(); } else if (which == 2) { new TreeMap(); } return null; } } Map hashMap = Factory.creator(1); 优点:我们无需提供具体的子类类名,只需要提供一个字符串即可得到相应的实例对象。这样的话,当子类的类名更换或者增加子类时我们都无需修改客户端代码,只需要在简单工厂类上增加一个分支判断代码即可。 缺点:所有内容全部放在工厂里面了,导致工厂类比较复杂
3.工厂模式
工厂接口 public interface FactoryInterface { Map creator(); } 工厂实现类 public class HashMapFactory implements FactoryInterface { public Map creator() { System.out.println("hashmap"); return new HashMap(); } } public class TreeMapFactory implements FactoryInterface { public Map creator() { System.out.println("treeMap"); return new TreeMap(); } }
调用通过反射:
FactoryInterface hashMapFactory = (FactoryInterface) Class.forName("com.jd.xq.HashMapFactory").newInstance(); FactoryInterface treeMapFactory = (FactoryInterface) Class.forName("com.jd.xq.TreeMapFactory").newInstance(); Map treeMap = treeMapFactory.creator(); Map hashMap = hashMapFactory.creator();