【设计模式:单例模式】使用单例模式载入properties文件
2016-03-01 12:35
344 查看
先准备測试程序:
当中properties文件里有一行例如以下:
key=value
优先选择方案三
方式一:懒汉方式
到第一次使用实例时。才载入实例
优点是仅仅有到第一次调用getInstance才生成对象,节省了空间。不足之处在于同步锁导致有可能运行过慢。
2、饿汉方式
因为BasicConfiguration的实例是static。因此,当类被载入时就会初始化,但这样即使并不须要使用此实例,也会被初始化,导致内存空间的浪费。
方式三:
因为初始化放在内部类中,仅仅有当此内部类被使用时,才会进行初始化。
从而既节省了空间。也无需同步代码。
package org.jediael.util; import static org.junit.Assert.*; import org.junit.Test; public class BasicConfigurationTest { @Test public void testGetValue(){ BasicConfiguration configuration = BasicConfiguration.getInstance(); assertTrue(configuration.getValue("key").equals("value")); } }
当中properties文件里有一行例如以下:
key=value
优先选择方案三
方式一:懒汉方式
到第一次使用实例时。才载入实例
package org.jediael.util; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class BasicConfiguration { private static BasicConfiguration configuration = null; private Properties pros = null; public static synchronized BasicConfiguration getInstance(){ if(configuration == null){ configuration = new BasicConfiguration(); } return configuration; } public String getValue(String key){ return pros.getProperty(key); } private BasicConfiguration(){ readConfig(); } private void readConfig() { pros = new Properties(); InputStream in = null; try { in = new FileInputStream(Thread.currentThread().getContextClassLoader().getResource("") .getPath() + "search.properties"); pros.load(in); } catch (FileNotFoundException e) { e.printStackTrace(); }catch (IOException e) { e.printStackTrace(); }finally{ try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } }上述程序中。产生了BasicConfiguration的一个单例。
优点是仅仅有到第一次调用getInstance才生成对象,节省了空间。不足之处在于同步锁导致有可能运行过慢。
2、饿汉方式
package org.jediael.util; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class BasicConfiguration { private static BasicConfiguration configuration = new BasicConfiguration(); private Properties pros = null; public static BasicConfiguration getInstance(){ return configuration; } public String getValue(String key){ return pros.getProperty(key); } private BasicConfiguration(){ readConfig(); } private void readConfig() { pros = new Properties(); InputStream in = null; try { in = new FileInputStream(Thread.currentThread().getContextClassLoader().getResource("") .getPath() + "search.properties"); pros.load(in); } catch (FileNotFoundException e) { e.printStackTrace(); }catch (IOException e) { e.printStackTrace(); }finally{ try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } }
因为BasicConfiguration的实例是static。因此,当类被载入时就会初始化,但这样即使并不须要使用此实例,也会被初始化,导致内存空间的浪费。
方式三:
package org.jediael.util; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.Properties; public class BasicConfiguration { private Properties pros = null; private static class ConfigurationHolder{ private static BasicConfiguration configuration = new BasicConfiguration(); } public static BasicConfiguration getInstance(){ return ConfigurationHolder.configuration; } public String getValue(String key){ return pros.getProperty(key); } private BasicConfiguration(){ readConfig(); } private void readConfig() { pros = new Properties(); InputStream in = null; try { in = new FileInputStream(Thread.currentThread().getContextClassLoader().getResource("") .getPath() + "search.properties"); pros.load(in); } catch (FileNotFoundException e) { e.printStackTrace(); }catch (IOException e) { e.printStackTrace(); }finally{ try { in.close(); } catch (IOException e) { e.printStackTrace(); } } } }
因为初始化放在内部类中,仅仅有当此内部类被使用时,才会进行初始化。
从而既节省了空间。也无需同步代码。
相关文章推荐
- Android开发常用网站汇总
- 求shopnc商城标签词tags的伪静态方法,服务器是nginx
- 三层架构(我的理解及详细分析)
- SNMP监控一些常用OID的总结
- tomcat中logs下的catalina.out过大处理办法
- 通过定义属性动画资源Property Animation来实现背景色的不断变化
- Linux系统调优
- 【系统】CentOS、Ubuntu、Debian三个linux比较异同
- 在团800运维工作总结之codis使用
- 解决 Linux 下 SSH 远程连接服务卡慢的全过程
- 解决loops与synthetic keys的问题
- tomcat绑定域名--常忘-记录
- 图文解说Win7系统机器上发布C#+ASP.NET网站
- 在团800运维工作总结之kafka集群日常工作经验总结
- hadoop2.6数据导入elasticsearch2.2(解析hbase导出数据)
- JAVAWEB学习——TOMCAT安装及虚拟目录的配置
- Linux命令
- linux C共享内存函数
- tomcat与jdk整合,免安装
- Linux 终端下 dstat 监控工具