`
squll369
  • 浏览: 107237 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

利用多例模式编写配置文件读取器

 
阅读更多

    多例模式是单例模式的一个变种,可以根据一个特征值购建一个唯一的在JVM中的实例,有多少个特征值就可以创建多少个实例,如果这个特征值是无限的,就可以创建无限多个实例,但是每个实例一定是和特征值绑定的,每一个特征值的实例在JVM中,有且只有1个。

    根据这个特点,想到如下的一个应用:

    项目中有多个配置文件,但每一个配置文件应该只有一个实例在内存中,没有必要为每一个文件写一个单例类,每一个配置文件名,就是一个特征值,这个应用刚好符合多例模式的使用。

 

package com.balance.message.common.util;

import java.io.InputStream;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

public class MessageProperties {
	
	private static Map<String,MessageProperties> map_messageProperties = new HashMap<String,MessageProperties>(19);
	
	private Properties ps;
	
	private MessageProperties(String propertiesFileName){	
		InputStream in = null;	
		try{		
			ps = new Properties();			
			URL url = this.getClass().getClassLoader().getResource(propertiesFileName);
			
			if(url != null){
				in = this.getClass().getClassLoader().getResource(propertiesFileName).openStream();	
			}else {
				in = this.getClass().getResourceAsStream(propertiesFileName);
			}
			ps.load(in);
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			if(in != null){
				try{
					in.close();
					in = null;	
				}catch(Exception e){
					e.printStackTrace();
				}
			}
		}
	}
	
	public static MessageProperties getInstance(String propertiesFileName){
		if(!map_messageProperties.containsKey(propertiesFileName)){
			MessageProperties messageProperties  = new MessageProperties(propertiesFileName);
			map_messageProperties.put(propertiesFileName, messageProperties);
		}
		return map_messageProperties.get(propertiesFileName);
	}
	
	public String getValue(String key){
		return ps.getProperty(key);
	}
}

 

我们在classpath下放上下面2个配置文件

    msg.head.properties

header.cut.as = 160
header.cut.atd = 160
header.cut.fd = 160
header.cut.sq = 160

    msg.tailer.properties

trailer.cut.as = 8000
trailer.cut.atd = 7900
trailer.cut.fd = 6800
trailer.cut.sq = 7300

 

下面使用这个MessageProperties去读取属性,

public static void main(String[] args){
		System.out.println(MessageProperties.getInstance("msg.head.properties").getValue("header.cut.fd"));
		System.out.println(MessageProperties.getInstance("msg.tailer.properties").getValue("trailer.cut.as"));	
	}

 

 

执行结果:

160
8000

 

分享到:
评论

相关推荐

    编程语言实现模式【高清版】

    器实现编程语言,而是泛指任何处理、分析、翻译输入文件的程序,比如配置文件读取器、数据读取器、模型驱动的代码生成器、源码到源码的翻译器、源码分析工具、解释器,以及诸如此类的工具。为此,作者举例讲解已有...

    编程语言实现模式

    这里的语言应用并非特指用编译器或解释器实现编程语言,而是泛指任何处理、分析、翻译输入文件的程序,比如配置文件读取器、数据读取器、模型驱动的代码生成器、源码到源码的翻译器、源码分析工具、解释器,以及诸如...

    编程语言实现模式 带书签高清版

    这里的语言应用并非特指用编译器或解释器实现编程语言,而是泛指任何处理、分析、翻译输入文件的程序,比如配置文件读取器、数据读取器、模型驱动的代码生成器、源码到源码的翻译器、源码分析工具、解释器,以及诸如...

    编程语言实现模式(Language Implementation Patterns)

    这里的语言应用并非特指用编译器或解释器实现编程语言,而是泛指任何处理、分析、翻译输入文件的程序,比如配置文件读取器、数据读取器、模型驱动的代码生成器、源码到源码的翻译器、源码分析工具、解释器,以及诸如...

    JAVA上百实例源码以及开源项目

     数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录  一个Java+ajax写...

    Java网上书店管理系统(基于MVC模式编写:前端jsp页面、数据库MySQL、服务器Tomcat).zip

    MySQL通过高效的缓存机制、查询优化器以及对硬件资源的有效利用,保证了在高负载情况下的稳定性和快速响应。它支持水平扩展(如通过分片、复制等技术)和垂直扩展(如增加硬件资源),以应对大规模数据存储和高并发...

    java源码包---java 源码 大量 实例

     数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录  一个Java+ajax写...

    msp430串口spiSD卡文件多任务系统等应用源程序

    多任务系统是一种操作系统设计模式,它允许在同一时间段内有多个任务同时运行。在MSP430上实现多任务系统,可以提高系统的效率和实时性。每个任务都可以独立运行,并且可以根据优先级进行调度。通过合理地配置和编程...

    java源码包2

     数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录  一个Java+ajax...

    java源码包3

     数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录  一个Java+ajax...

    java源码包4

     数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录  一个Java+ajax...

    Ubuntu权威指南(2/2)

    分成两个分卷进行压缩 ...12.2.5 sources.list配置文件 325 12.3 利用aptitude管理软件包 327 12.3.1 安装软件包 329 12.3.2 系统的升级 330 12.3.3 查询软件包 330 12.3.4 检索软件包 330 12.3.5 删除软件包 ...

    Ubuntu权威指南(1/2)

    分成两个分卷进行压缩 ...12.2.5 sources.list配置文件 325 12.3 利用aptitude管理软件包 327 12.3.1 安装软件包 329 12.3.2 系统的升级 330 12.3.3 查询软件包 330 12.3.4 检索软件包 330 12.3.5 删除软件包 ...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java从网络取得文件 1个目标文件 简单 Java从压缩包中提取文件 1个目标文件 简单 Java存储与读取对象 1个目标文件 如题 Java调色板面板源代码 1个目标文件 摘要:Java源码,窗体界面,调色板 使用Java语言编写的一款...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Java从网络取得文件 1个目标文件 简单 Java从压缩包中提取文件 1个目标文件 简单 Java存储与读取对象 1个目标文件 如题 Java调色板面板源代码 1个目标文件 摘要:Java源码,窗体界面,调色板 使用Java语言编写的一款...

    JAVA上百实例源码以及开源项目源代码

     数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录  一个Java+ajax写...

Global site tag (gtag.js) - Google Analytics