zoukankan      html  css  js  c++  java
  • 单例工厂

    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));
            }
        }
    }
  • 相关阅读:
    eclipse无法启动问题记录
    java环境配置
    Tomcat配置,Myeclipse破解和各种设置
    Android_Service详解及实例
    WTF
    jQuery实现图片轮播
    jQuery实现皮肤自定义
    CSS中的transform与transition
    checkbox实现全选/全不选
    ng-if可见
  • 原文地址:https://www.cnblogs.com/sprinng/p/6492767.html
Copyright © 2011-2022 走看看