`

修改《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 23种设计模式及例子

    - **描述**:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 - **示例**:SQL查询解析器。 通过学习这些设计模式及其应用场景,开发者可以更好地组织和优化...

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

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

    Java100例 Java100例

    "Java100例"是一个全面的学习资源,旨在通过实际示例帮助初学者和有经验的开发者深入理解Java的核心概念和技术。这个压缩包可能包含了100个不同的Java代码实例,覆盖了从基础语法到高级特性的各个方面。以下是一些...

    JAVA实例编程100例3

    在JAVA实例编程100例3的压缩包中,包含了多个具体的编程实例,这些实例旨在帮助开发者深入理解和熟练掌握JAVA编程语言。以下是根据文件名称所推测的几个关键知识点的详细说明: 1. **实例85**:可能涉及到的是在...

    Java 编程百个例子

    Java编程百个例子是针对Java初学者和进阶者的一份宝贵资源,它包含了各种典型且实用的编程示例,旨在帮助学习者更好地理解和掌握Java语言的核心概念与技术。通过这些例子,你可以深入理解Java的基本语法、面向对象...

    java开发常用设计模式

    5. **观察者模式**:定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。Spring事件监听机制即采用了观察者模式。 6. **装饰者模式**:动态地给一个对象添加...

    JAVA100经典例子

    "JAVA100经典例子"这个资源集合可能包含了从基础到高级的各种Java编程示例,帮助开发者深入掌握这一强大的面向对象的语言。以下是一些可能包含在这些例子中的重要知识点: 1. **基础语法**:包括变量声明、数据类型...

    JAVA实用编程100例

    在"JAVA实用编程100例"这个主题中,我们将会深入探讨Java编程语言的一些核心概念和实际应用。Java是一种广泛使用的面向对象编程语言,它以其跨平台的特性、强大的性能以及丰富的类库而受到开发者们的青睐。这100个...

    Java编程经典例子超过300例+大厂上百面试题.zip

    这份"Java编程经典例子超过300例+大厂上百面试题.zip"资源旨在帮助开发者深入理解Java语言的核心概念,并提供实战练习以提升技能。其中包含的300多个实例覆盖了Java的各个关键领域,而面试题则可以帮助求职者准备...

    java源码包2

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

    java趣味编程100例

    Java趣味编程100例是一份专为编程爱好者和初学者设计的学习资源,它通过一系列有趣、富有挑战性的实例,帮助学习者深入理解和掌握Java编程语言。这些源文件旨在激发学习者的兴趣,使他们在实践中不断提高编程技能。...

    java源码包3

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

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

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

    设计模式——JAVA.docx

    - **解释器模式**:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 通过对这些设计模式的学习和应用,开发者可以更好地组织代码,使其更具有灵活性、可扩展性...

    Java 实用编程100例

    "Java实用编程100例"这个资源为初学者提供了一个丰富的学习平台,它包含了100个实际的编程例子,旨在帮助新接触Java的人快速理解并应用基本概念。这些实例涵盖了从基础语法到高级特性的广泛主题,使学习过程更为直观...

    java经典编程300例

    这个压缩包中的300个例子涵盖了Java语言的多个方面,包括但不限于: 1. **基础语法**:这些例子会涉及Java的基础语法,如变量、数据类型、运算符、流程控制语句(如if、switch、for、while)、方法的定义与调用等。...

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

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

    Java大学实用教程例子源代码

    Java大学实用教程例子源代码是针对学生和初学者的一个宝贵资源,它包含了Java编程语言的各种实践案例,旨在帮助用户深入理解和掌握Java的核心概念。这些源代码通常与大学课程中的教学内容紧密相关,覆盖了从基础语法...

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

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

    Java实效编程100例之2

    《Java实效编程100例之2》是一个深入学习Java编程的资源集合,它通过具体的实例,帮助开发者提升编程技能,理解并掌握Java语言的核心概念和技术。这些实例涵盖了各种编程场景,旨在解决实际开发中遇到的问题,提升...

Global site tag (gtag.js) - Google Analytics