设计模式 第5篇 多例模式 Muititon Pattern 与 JAVA资源国际化处理
2011-08-03 21:48
585 查看
多例模式是一种对象创建模式,具体有两个特点:
(1)多例类可以具有多个实例
(2)多例类必须自己创建和管理自己的实例,并且向外界提供自己的实例
以资源国际化为例:比如一个网站访问者包括世界各地的人,不同地域不同语言的访问者可以选择网站所需要呈现的语言,比如选择中文。
首先介绍下 JAVA使用properties文件与Locale以及ResourceBundle做资源国际化处理:
资源文件的命名规则是filename + Locale代码的properties文件 。
Locale对象与ResourceBundle对象的使用:
介绍完JAVA处理资源国际化的原理后,我们开始思考怎样将多例模式运用到资源国际化中去?具体看代码吧,你懂的!
资源文件:
res_en_US.properties内容:
USD=US Dollar
JPY=Japanese Yen
res_zh_CH.properties内容
USD=美元
JPY=日圆
(1)多例类可以具有多个实例
(2)多例类必须自己创建和管理自己的实例,并且向外界提供自己的实例
以资源国际化为例:比如一个网站访问者包括世界各地的人,不同地域不同语言的访问者可以选择网站所需要呈现的语言,比如选择中文。
首先介绍下 JAVA使用properties文件与Locale以及ResourceBundle做资源国际化处理:
资源文件的命名规则是filename + Locale代码的properties文件 。
Locale对象与ResourceBundle对象的使用:
//创建Locale代码
Locale locale = new Locale("zh","CH"); //此时系统会在类加载路径下(即src)加载一个名为 res_zh_CH 的的properties文件 ResourceBundle rBundle = ResourceBundle.getBundle("res",locale); //根据资源文件中的“name”键值得到value String str = rBundle.getString("name");
介绍完JAVA处理资源国际化的原理后,我们开始思考怎样将多例模式运用到资源国际化中去?具体看代码吧,你懂的!
public class LingualResource { private static final String FILE_NAME = "res"; private Locale mLocale ; private ResourceBundle mResourceBundle ; private static Hashtable<String , LingualResource> instances = new Hashtable(); private String language ; private String region ; /** * 私有话构造子,多例类自己负责具体实例的创建 */ private LingualResource(){ } private LingualResource(String language , String region){ this.language = language ; this.region = region ; this.mLocale = new Locale(this.language, this.region); this.mResourceBundle = ResourceBundle.getBundle(FILE_NAME, mLocale); instances.put(makeLocaleCode(language, region), this); } /** * 向外界提供具体的实例 * @param language * @param region * @return */ public static synchronized LingualResource getInstance(String language , String region){ String localeCode = makeLocaleCode(language, region); if(instances.containsKey(localeCode)){ return instances.get(localeCode); }else return new LingualResource(language, region); } public String getLocaleString(String code){ return this.mResourceBundle.getString(code); } private static String makeLocaleCode(String language , String region){ return language+"_"+region ; } }
public class Client { public static void main(String[] args) throws UnsupportedEncodingException { LingualResource l1 = LingualResource.getInstance("en", "US"); System.out.println(l1.getLocaleString("JPY")); //打印结果 --> Japanese Yen System.out.println("----------------"); LingualResource l2 = LingualResource.getInstance("zh", "CH"); System.out.println(new String(l2.getLocaleString("JPY").getBytes("ISO-8859-1"),"utf-8")); //打印结果--> 日圆 } }
资源文件:
res_en_US.properties内容:
USD=US Dollar
JPY=Japanese Yen
res_zh_CH.properties内容
USD=美元
JPY=日圆
相关文章推荐
- LabVIEW设计模式系列——资源关闭后错误处理
- java设计模式之Template Method模式 ——将具体处理交给子类
- Java读书笔记12 事件处理基础 Observer设计模式
- Java设计模式(3)Template Method模式 将具体处理交给子类
- java设计模式---Template Method模板方法---实际处理交给子类
- 【Java设计模式】状态模式处理返回码
- 做国际项目时候,处理翻译的国际化资源文件的java代码
- java设计模式----模版模式+内部类+设计时间事件处理框架
- 12 自定义标签/JSTL标签库/web国际化/java web之设计模式和案例
- java4Android(15)处理流的使用示例、装饰者设计模式、节点流和处理流的关系
- JAVA设计模式-事务处理
- java设计模式----模版模式+内部类+设计时间事件处理框架
- Java中常用来处理时间的三个类:Date、Calendar、SimpleDateFormate,以及Java中的单例设计模式:懒汉式、饿汉式以及静态内部类式
- Java设计模式_观察者模式&事件处理机制
- Java设计模式学习资源汇总
- JAVA设计模式之事务处理
- JAVA设计模式之事务处理
- Java-马士兵设计模式学习笔记-责任链模式-模拟处理Reques Response
- Java-马士兵设计模式学习笔记-责任链模式-处理数据
- JavaGUI图形化界面外观模式设计资源库