`

修改《java与模式》中有一个关于多例模式的一个多语言支持的一个例子的错误

    博客分类:
  • java
阅读更多
java与模式中有一个关于多例模式的一个多语言支持的一个例子,但程序有点问题,我把它修改了一下。
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.ResourceBundle;


public class LingualResource {
	/**
	 * This is the language attribute
	 */
	private String language = "en";
	
	/**
	 * This is the country attribute
	 */
	private String region = "US";
	
	/**
	 * This is the localeCode attribute
	 */
	private String localeCode = "en_US";
	
	/**
	 * This is the file name of the resource bundle
	 */
	private final static String FILE_NAME = "res";
	
	/**
	 * This collection keep many LingualResource object according to there locale code.
	 */
	private static Map<String,LingualResource> instances = new HashMap<String,LingualResource>(19);
	
	/**
	 * This is the locale object, is initialized by language and region
	 */
	private Locale locale = null;
	
	/**
	 * This is the ResourceBundle object, initialized by the locale and the 
	 * base file name.
	 */
	private ResourceBundle resourceBundle = null;
		
	/**
	 * This is the default construct
	 */
	private LingualResource(){}
	
	/**
	 * This is another overloaded constructor
	 * @param language The language attribute
	 * @param region The region attribute
	 */
	private LingualResource(String language,String region){
		this.language = language;
		this.region = region;
		this.localeCode = makeLocaleCode(language, region);
		this.locale = new Locale(language,region);
		resourceBundle =  ResourceBundle.getBundle(FILE_NAME,this.locale);
		instances.put(this.localeCode, this);
	};
	
	/**
	 * This is a factory method to return a LingualResource.
	 * It first judge if it is has existed in the Map collection,
	 * if it currently has existed in the map, then directly return it.
	 * Otherwise directly new a object. Pay attention to the constructor,
	 * in the constructor code body, the newly constructed object will
	 * be put into the collection 
	 * @param language The language attribute.
	 * @param region The region attribute.
	 * @return
	 */
	public static synchronized LingualResource getInstance(String language,String region){
		System.out.println(instances);
		if(instances.containsKey(makeLocaleCode(language,region))){
			System.out.println(instances.get(makeLocaleCode(language,region)).getClass());
			return (LingualResource)instances.get(makeLocaleCode(language,region));
		} else {
			return new LingualResource(language,region);
		}
		
	}
	
	/**
	 * This method is to make up the locale code according to the language attribute and the
	 * region attribute
	 * @param language The language attribute
	 * @param region The region attribute.
	 * @return
	 */
	private static String makeLocaleCode(String language,String region){
		return language + "_" + region;
	}
	
	public String getLanguage() {
		return language;
	}

	public void setLanguage(String language) {
		this.language = language;
	}

	public String getRegion() {
		return region;
	}

	public void setRegion(String region) {
		this.region = region;
	}

	public Locale getLocale() {
		return locale;
	}

	public void setLocale(Locale locale) {
		this.locale = locale;
	}

	public ResourceBundle getResourceBundle() {
		return resourceBundle;
	}

	public void setResourceBundle(ResourceBundle resourceBundle) {
		this.resourceBundle = resourceBundle;
	}

	public String getLocaleString(String code){
		return resourceBundle.getString(code);
	}
}



客户端调用代码:

public class LingualResourceTester {
	public static void main(String[] args)
    {
        LingualResource ling = 
            LingualResource.getInstance("en" , "US");
        String usDollar = ling.getLocaleString("USD");
        System.out.println("USD=" + usDollar);
        LingualResource lingZh = 
            LingualResource.getInstance("zh" , "CH");
        String usDollarZh = lingZh.getLocaleString("USD");
        System.out.println("USD=" + usDollarZh);
        
        LingualResource lingTwo = 
            LingualResource.getInstance("en" , "US");
        String usDollarTwo = lingTwo.getLocaleString("USD");
        System.out.println("USD=" + usDollarTwo);
        LingualResource lingZhTwo = 
            LingualResource.getInstance("zh" , "CH");
        String usDollarZhTwo = lingZhTwo.getLocaleString("USD");
        System.out.println("USD=" + usDollarZhTwo);
    }
}



本地化文件:
// res_en_US.properties
USD=US Dollar
JPY=Japanese Yen


// res_zh_CH.properties
USD=美元
JPY=日元
分享到:
评论
1 楼 lhlzist 2009-01-15  
顶你了。我就觉得有问题,还好查了下。

相关推荐

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

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    java源码包2

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...

    java源码包4

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...

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

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

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

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    java源码包3

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...

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

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

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    在 java 语言中,Java 程序的基本单位是类,也就是说:一个 Java 程序是由多个类组成 的。定义一个类与定义一个数据类型是有区别的。在程序设计语言中,把定义数据类型的能 力作为一种很重要的能力来对待。在面向...

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

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

    二十三种设计模式【PDF版】

    关于本站“设计模式” Java 提供了丰富的 API,同时又有强大的数据库系统作底层支持,那么我们的编程似乎变成了类似积木的简单"拼凑"和调用, 甚至有人提倡"蓝领程序员",这些都是对现代编程技术的不了解所至. 在...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

     《Java开发实战1200例》分为I、II两卷共计1200个例子,包括了开发中各个方面最常用的实例,是目前市场上实例最全面的开发类图书;书中实例来源于多位工程师的多年积累,具有很强的实用性。 本书是第II卷,以开发...

    Java核心技术II(第8版)

    7.10.2 读取和写入带有多个图像的文件 7.11 图像处理 7.11.1 构建光栅图像 7.11.2 图像过滤 7.12 打印 7.12.1 图形打印 7.12.2 打印多页文件 7.12.3 打印预览 7.12.4 打印服务程序 7.12.5 流打印服务程序 7.12.6 ...

    Java-PHP-C#

    你可以看见如果你没有用我们提到的两个字符(最后一个例子),就是说 模式(正则表达式) 可以出现在被检验字符串的任何地方,你没有把他锁定到两边 这里还有几个字符 '*', '+',和 '?', 他们用来表示一个字符可以...

    asp.net知识库

    关于能自定义格式的、支持多语言的、支持多数据库的代码生成器的想法 发布Oracle存储过程包c#代码生成工具(CodeRobot) New Folder XCodeFactory3.0完全攻略--序 XCodeFactory3.0完全攻略--基本思想 XCodeFactory...

Global site tag (gtag.js) - Google Analytics