【设计模式:单例模式】使用单例模式加载properties文件
来源:互联网 发布:java入门自学书籍推荐 编辑:程序博客网 时间:2024/04/30 06:01
先准备测试程序:
package org.jediael.util;import static org.junit.Assert.*;import org.junit.Test;public class BasicConfigurationTest {@Testpublic 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();}}}}
由于初始化放在内部类中,只有当此内部类被使用时,才会进行初始化。从而既节省了空间,也无需同步代码。
0 0
- 【设计模式:单例模式】使用单例模式加载properties文件
- 【设计模式:单例模式】使用单例模式加载properties文件
- 使用单例模式加载properties文件
- 使用单例模式加载properties文件
- 使用单例模式读取Properties文件
- 使用单例模式读取properties文件
- 单例模式 [ Properties ]
- 单例模式加载properties配置文件
- 单例模式读取Properties文件
- 读取Properties文件(单例模式)
- 单例模式读取Properties文件
- 【设计模式】正确使用单例模式
- 设计模式--单例模式(四)单例模式实例配置 Properties
- 设计模式------单例模式
- 设计模式------单例模式
- 设计模式-单例模式
- 设计模式 - 单例模式
- 设计模式---单例模式
- 8_陀螺仪MPU6050和PWM控制在STM32F4-Discovery开发板上的实现
- [c语言]输入n,分别用*输出边长为n的实心菱形和空心菱形
- Matlab中fscanf的用法
- 多语言支持
- linux/win重置mysql的root密码
- 【设计模式:单例模式】使用单例模式加载properties文件
- MFC中输出TRACE宏
- 使用yii的layout,加入<?php echo $content; ?>这句话时,它会自动在子页面上面添加一个div包裹
- 深入理解vector list deque——存储结构机理
- 解决访问本地Android文档很慢的问题
- c++容器(vector、list、deque)
- strlen和sizeof的区别,以及extern的用法
- wildfly/jboss修改支持外网访问
- 我想寻求一段上传下载代码(功能多点)。