`
squll369
  • 浏览: 108702 次
  • 性别: 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

 

分享到:
评论

相关推荐

    vb 编写的动态读取txt文件

    在VB(Visual Basic 6.0)编程环境中,动态读取TXT文件是一项基本但至关重要的技能,尤其是在处理日志、配置文件或者简单的数据存储时。本项目提供的代码示例展示了如何利用VB实现这一功能,同时允许用户在文本框...

    ksh修改配置文件脚本

    结合上述知识点,`setcfg.sh`可能通过`awk`或`sed`修改配置文件,而`getcfg.sh`则可能利用`grep`或`awk`提取并展示配置信息。在实际应用中,这两个脚本可能会与其他工具如`cron`结合,实现定期自动配置更新或监控。...

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

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

    QT编写的文件查询器

    综上所述,QT编写的文件查询器展示了如何利用QT库来创建一个功能完备的文件管理工具,涵盖了文件系统的操作、GUI设计、事件处理和资源管理等多个方面。对于初学者和有经验的QT开发者来说,都是一个很好的学习和参考...

    编程语言实现模式

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

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

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

    java语言编写的词法分析器

    总结来说,这个“java语言编写的词法分析器”项目展示了如何利用Java语言和特定的配置文件来实现一个自定义的词法分析工具。开发者可以借此了解编译器前端的基本工作原理,并学习如何处理和分析源代码。对于那些想要...

    python脚本编写Verilog文件

    这些核可以是数字信号处理器、内存控制器等,Python脚本可以根据参数灵活生成不同配置的IP核的Verilog代码。 7. **自动化测试平台**:Python还可以用来创建Verilog的自动化测试平台(Testbench)。利用Python的控制...

    C# 编写的歌词编辑器

    这个压缩包可能包含了编辑器的主程序、相关的配置文件、示例歌词文件以及可能的文档或说明。其中,"lrc编辑器"可能是指主程序的可执行文件,用于启动和运行歌词编辑器。用户可以通过这个程序打开LRC文件,查看、编辑...

    delphi编写的小型解释器

    这种模式在脚本解析、配置文件处理或简单的计算任务中非常常见。 Delphi是一款强大的面向对象的 Pascal 编程环境,它提供了丰富的类库和强大的编译器,使得创建高效的应用程序变得简单。在Delphi中编写解释器,我们...

    Struts配置文件使用及代码详解

    Struts2是一个强大的Java EE平台上的MVC框架,它的设计目标是简化Web应用程序的...以上便是Struts2配置文件的使用和代码详解,通过理解这一框架的工作原理和优势,开发者可以更加高效地利用Struts2来构建Web应用程序。

    用单片的蜂鸣器编写C语言程序

    `音乐编程示意.doc` 是关于如何编程实现音乐播放的文档,`Music.hex` 是编译后的目标文件,`Music.lnp` 可能是编程器使用的配置文件。 在编写C语言程序时,我们需要理解并熟练运用这些知识点,结合具体的音乐编码和...

    ST7789 配置文件及参考手册

    配置文件通常包含一系列指令代码,这些代码会被MCU(微控制器)读取并执行,以正确地配置ST7789芯片。用户可能需要根据具体的LCD模组和应用需求调整这些参数。 "ST7789V_SPEC_V1.3.pdf" 则是ST7789的官方规格书,这...

    安卓HTML5文件管理器案例

    3. **读取和写入文件**:`FileReader`用于读取文件内容,`FileWriter`则用于写入或追加数据到文件。 4. **文件URL**:`file:`协议允许将本地文件转换为URL,便于在其他HTML元素如`&lt;img&gt;`或`&lt;audio&gt;`中使用。 二、...

    AspNetColorV1.0 颜色读取器控件

    当用户在控件中选择颜色并触发变化时,相关事件将被触发,开发者可以利用这些事件编写响应逻辑,为应用增加更多的交互性。 ASP.NET开发者在使用AspNetColorV1.0控件时,也不应忽视兼容性和性能优化这两个方面。由于...

    GIS文件读取C++类库

    在调试和发布模式下,确保正确配置了库文件路径和链接选项。对于debug模式,可能需要链接debug版本的库文件(如`libshapedbg.a`),而在release模式下则链接release版本(如`libshape.a`)。同时,编译选项应与你的...

    MPU6050配置文件

    综上所述,"MPU6050配置文件"和"STM32DMP移植"涉及STM32与MPU6050的硬件连接、传感器的初始化配置、DMP的固件移植和数据处理等多个层面。对于嵌入式开发者来说,理解并熟练掌握这些知识点是成功实现项目的关键。

    基于STM32的SD卡读取FATFS文件系统

    本项目是关于如何在基于KEIL开发环境的STM32平台上实现对SD卡的读取功能,利用FATFS进行文件系统的管理。 首先,我们要了解STM32。STM32是由意法半导体(STMicroelectronics)推出的基于ARM Cortex-M系列内核的微...

Global site tag (gtag.js) - Google Analytics