public abstract class Human { public abstract void doSomething(); } public class WhiteHuman extends Human { @Override public void doSomething() { } } public class YellowHuman extends Human { @Override public void doSomething() { } } public class Factory { private static final Map<String,Object> objectMap = new HashMap<String, Object>(); public synchronized static <T extends Human> T createHuman(Class<T> c){ Human human = null; String className = null; className =c.getName(); try { if (!objectMap.containsKey(className)) { Class class1 = Class.forName(className); Constructor constructor = class1.getDeclaredConstructor(); constructor.setAccessible(true); human = (Human) constructor.newInstance(); objectMap.put(className, human); } } catch (Exception e) { // TODO: handle exception } return (T)objectMap.get(className); } } //测试 public class Demo { public static void main(String[] s) { for(int i = 0; i < 100; i++){ System.out.println(Factory.createHuman(YellowHuman.class)); } } }