博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
原型模式 (原型管理器)
阅读量:6244 次
发布时间:2019-06-22

本文共 6605 字,大约阅读时间需要 22 分钟。

原型模式:对象的创建模式

原型管理器:原型管理器角色保持一个聚集,作为对所有原型对象的登记,这个角色提供必要的方法,供外界增加新的原型对象和取得已经登记过的原型对象。

 

public class PrototypeManager {    /**     * 用来记录原型的编号和原型实例的对应关系     */    private static Map
map = new HashMap
(); /** * 私有化构造方法,避免外部创建实例 */ private PrototypeManager(){} /** * 向原型管理器里面添加或是修改某个原型注册 * @param prototypeId 原型编号 * @param prototype 原型实例 */ public synchronized static void setPrototype(String prototypeId , Prototype prototype){ map.put(prototypeId, prototype); } /** * 从原型管理器里面删除某个原型注册 * @param prototypeId 原型编号 */ public synchronized static void removePrototype(String prototypeId){ map.remove(prototypeId); } /** * 获取某个原型编号对应的原型实例 * @param prototypeId 原型编号 * @return 原型编号对应的原型实例 * @throws Exception 如果原型编号对应的实例不存在,则抛出异常 */ public synchronized static Prototype getPrototype(String prototypeId) throws Exception{ Prototype prototype = map.get(prototypeId); if(prototype == null){ throw new Exception("您希望获取的原型还没有注册或已被销毁"); } return prototype; }}

 

public class PropertiesUtil {        /** 保存所有的properties */    private static ConcurrentHashMap
propertiesMap = new ConcurrentHashMap
(); /** * 取得指定的properties * @param path properties的路径(如:com/webvoice/properties/webvoice.properties) * @return properties */ public synchronized static Properties getProperties(String path) { Properties prop = new Properties(); try ( InputStream propIS = PropertiesUtil.class.getClassLoader().getResourceAsStream(path); ){ prop.load(propIS); propertiesMap.put(path, prop); } catch (Exception e) { AbstractBaseAction.logger.systemError("001", "获取properties失败:path=[" + path + "].", "PropertiesUtil", e); } return propertiesMap.get(path); }}

 

PropertiesUtil 的完整版

 

1 public class PropertiesUtil {  2       3     /** 保存所有的properties */  4     private static ConcurrentHashMap
propertiesMap = new ConcurrentHashMap
(); 5 6 /** 7 * 取得指定的properties 8 * 9 * @param path properties的路径(如:com/webvoice/properties/webvoice.properties) 10 * @return properties 11 */ 12 public synchronized static Properties getProperties(String path) { 13 Properties prop = new Properties(); 14 try ( 15 InputStream propIS = getClassLoader().getResourceAsStream(path); 16 ){ 17 18 prop.load(propIS); 19 propertiesMap.put(path, prop); 20 } catch (Exception e) { 21 AbstractBaseAction.logger.systemError("001", "获取properties失败:path=[" + path + "].", "PropertiesUtil", e); 22 } 23 return propertiesMap.get(path); 24 } 25 26 /** 27 * 取得当前运行程序的ClassLoader 28 * 29 * @return ClassLoader 30 */ 31 public static ClassLoader getClassLoader() { 32 return PropertiesUtil.class.getClassLoader(); 33 } 34 35 /** 36 * 取得properties中key定义的值,转化为数组返回 37 * 38 * @param key 39 * @param prop properties 40 * @return key对应值分割之后的数组 41 */ 42 public static String[] getArrayFromProperties(String key, Properties prop) { 43 String allValue = prop.getProperty(key); 44 String[] values = null; 45 if (allValue != null) { 46 values = allValue.split(","); 47 } 48 return values; 49 } 50 51 /** 52 * 取得properties中key定义的值,转化为数组返回 53 * 54 * @param key 55 * @param path properties的路径(如:com/webvoice/properties/webvoice.properties) 56 * @return key对应值分割之后的数组 57 */ 58 public static String[] getArrayFromProperties(String key, String path) { 59 String[] values = null; 60 Properties prop = getProperties(path); 61 if (prop == null) { 62 return values; 63 } 64 String allValue = prop.getProperty(key); 65 if (allValue != null) { 66 values = allValue.split(","); 67 } 68 return values; 69 } 70 71 /** 72 * 取得properties中key定义的值,转化为List返回 73 * 74 * @param key 75 * @param prop properties 76 * @return key对应值分割之后的List 77 */ 78 public synchronized static List
getListFromProperties(String key, Properties prop) { 79 List
retList = new ArrayList
(); 80 String allValue = prop.getProperty(key); 81 if (allValue != null) { 82 String[] values = allValue.split(","); 83 for (String singleValue : values) { 84 retList.add(singleValue); 85 } 86 } 87 return retList; 88 } 89 90 /** 91 * 取得properties中key定义的值,转化为List返回 92 * 93 * @param key 94 * @param path properties的路径(如:com/webvoice/properties/webvoice.properties) 95 * @return key对应值分割之后的List 96 */ 97 public synchronized static List
getListFromProperties(String key, String path) { 98 List
retList = new ArrayList
(); 99 Properties prop = getProperties(path);100 if (prop == null) {101 return retList;102 }103 String allValue = prop.getProperty(key);104 if (allValue != null && !"".equals(allValue)) {105 String[] values = allValue.split(",");106 for (String singleValue : values) {107 retList.add(singleValue);108 }109 }110 return retList;111 }112 113 }
View Code

 

 

 

 

 

1 public class PropertiesUtil { 2      3     /** 保存所有的properties */ 4     private static ConcurrentHashMap
propertiesMap = new ConcurrentHashMap
(); 5 6 /** 7 * 取得指定的properties 8 * @param path properties的路径(如:com/webvoice/properties/webvoice.properties) 9 * @return properties10 */11 public synchronized static Properties getProperties(String path) {12 Properties prop = new Properties();13 try (14 InputStream propIS = PropertiesUtil.class.getClassLoader().getResourceAsStream(path);15 ){16 17 prop.load(propIS);18 propertiesMap.put(path, prop);19 } catch (Exception e) {20 AbstractBaseAction.logger.systemError("001", "获取properties失败:path=[" + path + "].", "PropertiesUtil", e);21 }22 return propertiesMap.get(path);23 }24 }
View Code

 

转载于:https://www.cnblogs.com/Wen-yu-jing/p/4075512.html

你可能感兴趣的文章
VC6.0 C++ 如何调用微软windows系统SDK 语音API
查看>>
Python 3.5 RuntimeError: can't start new thread
查看>>
POJ 1659 Frogs' Neighborhood(可图性判定—Havel-Hakimi定理)【超详解】
查看>>
数字统计问题
查看>>
Windows下Redis缓存服务器的使用 .NET StackExchange.Redis Redis Desktop Manager
查看>>
SharpMap简析
查看>>
使用类加载器加载配置文件/getClassLoader().getResourceAsStream()
查看>>
配置 linux-bridge mechanism driver - 每天5分钟玩转 OpenStack(77)
查看>>
matplotlib绑定到PyQt5(有菜单)
查看>>
iOS - QRCode 二维码
查看>>
记录第一次纯手打爬虫经历
查看>>
PyCharm 开发Django ,错误汇总
查看>>
插入排序
查看>>
一个完整的C++程序SpreadSheet - 1) 类的声明和定义
查看>>
iOS6.1爆严重安全漏洞 解锁不用密码
查看>>
SupportGenius for PDMS
查看>>
Cloudera融资1.6亿美元推动大数据发展
查看>>
建造大型数据中心前期的浩瀚工程
查看>>
VMware助力中国企业加速数字化业务转型
查看>>
2016年移动安全趋势及威胁预测
查看>>