A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 825176857 中级黑马   /  2015-7-13 22:40  /  542 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. /**
  2. * 简单的对象创建工厂
  3. *
  4. * @author lazyp
  5. * @since 1.0
  6. */
  7. public final class SimpleObjectFactory {
  8.     private static final Logger logger = Logger.getLogger(SimpleObjectFactory.class);
  9.     private static final Lock LOCK = new ReentrantLock();
  10.     private static final ConcurrentHashMap<String, Object> OBJ_CACHE = new ConcurrentHashMap<String, Object>(16);

  11.     /**
  12.      * 需要一个无参构造函数
  13.      *
  14.      * @param cls
  15.      * @return
  16.      */
  17.     public static <T> T createInstance(Class<T> cls) {
  18.         String classStr = cls.getCanonicalName();
  19.         return createInstance(classStr);
  20.     }

  21.     @SuppressWarnings("unchecked")
  22.     public static <T> T createInstance(String classStr) {
  23.         if (StringUtils.isBlank(classStr)) {
  24.             return null;
  25.         }

  26.         logger.debug(classStr);

  27.         if (OBJ_CACHE.get(classStr) != null) {
  28.             return (T) OBJ_CACHE.get(classStr);
  29.         }

  30.         try {
  31.             LOCK.lock();
  32.             if (OBJ_CACHE.get(classStr) != null) {
  33.                 return (T) OBJ_CACHE.get(classStr);
  34.             }

  35.             logger.info("Create The " + classStr + " instance.");

  36.             T instance = (T) Class.forName(classStr).newInstance();
  37.             OBJ_CACHE.putIfAbsent(classStr, instance);
  38.             return instance;

  39.         } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
  40.             logger.error(e.getMessage());
  41.             return null;
  42.         } finally {
  43.             LOCK.unlock();
  44.         }

  45.     }

  46.     public static void main(String[] args) {
  47.         
  48.     }
  49. }
复制代码

1 个回复

倒序浏览
设计模式确实需要系统的理解。 很有必要的。~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马