`
Lstoryc
  • 浏览: 80874 次
文章分类
社区版块
存档分类
最新评论

通过枚举实现单例模式

 
阅读更多
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.text.MessageFormat;
import java.util.Locale;

import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

public enum JsonFileUtil {
    INSTANCE;
    
    private static final String imgPathFormat = "/image-generation-sample-{0}.json";
    private static final String pdfPathFormat = "/pdf-generation-sample-{0}.json";
    private static final String imgFileType = "img";
    private static final String pdfFileType = "pdf";
    
    private JsonParser jsonParser = new JsonParser();
    
    private final JsonObject jsonObject_zhcn_pdf;
    private final JsonObject jsonObject_zhtw_pdf;
    private final JsonObject jsonObject_us_pdf;
    
    private final JsonObject jsonObject_zhcn_img;
    private final JsonObject jsonObject_zhtw_img;
    private final JsonObject jsonObject_us_img;
    
    private JsonFileUtil() {
        jsonObject_zhcn_pdf = getInitedJsonObject(Locale.SIMPLIFIED_CHINESE, pdfFileType);
        jsonObject_zhtw_pdf = getInitedJsonObject(Locale.TRADITIONAL_CHINESE, pdfFileType);
        jsonObject_us_pdf = getInitedJsonObject(Locale.US, pdfFileType);
        
        jsonObject_zhcn_img = getInitedJsonObject(Locale.SIMPLIFIED_CHINESE, imgFileType);
        jsonObject_zhtw_img = getInitedJsonObject(Locale.TRADITIONAL_CHINESE, imgFileType);
        jsonObject_us_img = getInitedJsonObject(Locale.US, imgFileType);
    }
    
    private JsonObject _retriveJsonObject(Locale locale, String fileType) {
        JsonObject jsonObject = null;
        String pathFormat = null;
        
        if (fileType == "pdf")
            pathFormat = pdfPathFormat;
        else if (fileType == "img")
            pathFormat = imgPathFormat;
        
        String jsonPath = retrivejsonFilePath(pathFormat, locale);
        
        InputStream jsonIs = this.getClass().getResourceAsStream(jsonPath);
        BufferedReader jsonReader = new BufferedReader(new InputStreamReader(jsonIs));
        JsonElement jsonElement = jsonParser.parse(jsonReader);
        jsonObject = jsonElement.getAsJsonObject();
        
        return jsonObject;
    }
    
    private JsonObject getInitedJsonObject(Locale locale, String fileType) {
        JsonObject jsonObject = null;
        if (Locale.US == locale) {
            if (fileType == imgFileType) {
                if (null != jsonObject_us_img)
                    jsonObject = jsonObject_us_img;
                else
                    jsonObject = _retriveJsonObject(Locale.US, imgFileType);
            } else if (fileType == pdfFileType) {
                if (null != jsonObject_us_pdf)
                    jsonObject = jsonObject_us_pdf;
                else
                    jsonObject = _retriveJsonObject(Locale.US, pdfFileType);
            }
        } else if (Locale.SIMPLIFIED_CHINESE == locale) {
            if (fileType == imgFileType) {
                if (null != jsonObject_zhcn_img)
                    jsonObject = jsonObject_zhcn_img;
                else
                    jsonObject = _retriveJsonObject(Locale.SIMPLIFIED_CHINESE, imgFileType);
            } else if (fileType == pdfFileType) {
                if (null != jsonObject_zhcn_pdf)
                    jsonObject = jsonObject_zhcn_pdf;
                else
                    jsonObject = _retriveJsonObject(Locale.SIMPLIFIED_CHINESE, pdfFileType);
            }
        } else if (Locale.TRADITIONAL_CHINESE == locale) {
            if (fileType == imgFileType) {
                if (null != jsonObject_zhtw_img)
                    jsonObject = jsonObject_zhtw_img;
                else
                    jsonObject = _retriveJsonObject(Locale.TRADITIONAL_CHINESE, imgFileType);
            } else if (fileType == pdfFileType) {
                if (null != jsonObject_zhtw_pdf)
                    jsonObject = jsonObject_zhtw_pdf;
                else
                    jsonObject = _retriveJsonObject(Locale.TRADITIONAL_CHINESE, pdfFileType);
            }
        }
        
        return jsonObject;
    }
    
    private String retrivejsonFilePath(String formatPath, Locale locale) {
        String language = "en_US";
        if (Locale.TRADITIONAL_CHINESE.equals(locale))
            language = "zh_CN";
        else if (Locale.SIMPLIFIED_CHINESE.equals(locale))
            language = "zh_TW";
        String jsonPath = MessageFormat.format(formatPath, language);
        
        return jsonPath;
    }
    
    public JsonObject retriveJsonObject(Locale locale, String fileType) {
        return getInitedJsonObject(locale, fileType);
    }
}

 

分享到:
评论

相关推荐

    com_枚举方式实现单例模式_代码详解.rar

    通过“com_枚举方式实现单例模式_代码详解.rar”,你可以深入理解枚举单例模式的工作原理和应用场景。源码中的注释将帮助你更好地理解每个部分的作用,从而在实际开发中灵活运用这一模式。记住,在使用单例模式时,...

    JAVA 枚举单例模式及源码分析的实例详解

    JAVA 枚举单例模式是一种特殊的单例模式实现方式,它使用枚举类型来保证线程安全、防止序列化问题和反射攻击。下面我们将详细解释这个模式的实现原理和源码分析。 线程安全 在 Java 中,枚举类型的实例是在类加载...

    单例模式各种实现方式

    在Java中,实现单例模式有多种方法,每种都有其特定的优缺点和适用场景。以下是几种常见的单例模式实现方式: 1. **饿汉式(静态常量)**: 这是最简单的实现方式,它在类加载时就完成了初始化,因此是线程安全的...

    Java实现多种单例模式

    以下是Java实现的六种单例模式的详细解释: 1. 懒汉式(Lazy Initialization): 这种方式延迟了单例对象的初始化,直到第一次被请求时。例如,`SingleInstance1.java`可能就实现了这种方式。代码通常包含一个私有...

    通过C++实现一个设计模式-单例模式.zip

    文档的标题“通过C++实现一个设计模式-单例模式.zip”表明了文件的重点在于展示如何在C++语言中通过具体代码实现单例模式。文档中应该详细记录了单例模式的概念、特点、应用场景以及在C++中不同实现方式的比较和分析...

    设计模式之单例模式(结合工厂模式)

    静态内部类单例利用Java类加载机制保证了线程安全,而枚举单例则是Java中实现单例的最佳方式,因为它天然支持序列化且防止反射攻击。 在代码实现上,我们可以创建一个名为SingletonFactory的工厂类,其中包含一个...

    用enum实现单例模式的方法来读取配置文件

    而使用枚举实现单例模式则能确保线程安全,且避免了序列化问题,是Java推荐的一种实现方式。 ```java public enum Singleton { INSTANCE; private Properties properties; private Singleton() { // 加载配置...

    单例模式(饿汉模式、懒汉模式、DCL单例模式、枚举)

    本文将详细讨论四种常见的单例实现方式:饿汉模式、懒汉模式、双重检查锁定(DCL)单例模式以及枚举单例。 1. **饿汉模式**: 饿汉模式是在类加载时就完成了实例化,避免了线程同步问题。这种方式简单且安全,但...

    单例模式(Singleton)的6种实现

    Java中的枚举类型是线程安全的,并且只会装载一次,设计者充分考虑到了线程安全问题,因此使用枚举实现单例模式是一种简洁而且高效的解决方案。 6. 容器式单例(Singleton Holder) 通过一个私有的静态内部类...

    单例模式详解 1. 什么是单例模式? 1.1 单例模式的核心要素 1.2 为什么需要单例模式? 2. 单例模式的实现方式 2.1 饿汉式(静态常量) 2.2 饿汉式(静态代码块) 2.3 懒汉式(线程

    2.7 枚举实现 3. 单例模式的应用场景 3.1 配置管理器 3.2 数据库连接池 3.3 窗口管理器 3.4 日志记录器 4. 单例模式的优缺点 4.1 优点 4.2 缺点 5. 单例模式的注意事项 5.1 线程安全问题 5.2 序列化问题 5.3 反射...

    java单例模式实例

    在Java中,有多种实现单例模式的方法,每种都有其特点和适用场景。接下来,我们将深入探讨这些实现方式。 首先,我们来看**懒汉式(Lazy Initialization)**。这种实现方式是在类被首次请求时才创建单例对象,延迟...

    单例模式Java实现

    在Java中,我们可以使用多种方式来实现单例模式: 1. **饿汉式(静态常量)**:这是最简单的单例实现方式,它在类加载时就完成了初始化,所以类加载比较慢,但获取对象的速度快,且线程安全。 ```java public class...

    设计模式——单例模式(懒汉模式)

    在实际开发中,我们还可以使用静态内部类或者枚举方式来实现单例模式,这些方法同样具有线程安全性和懒加载特性,而且代码更简洁。例如,使用枚举实现的单例模式如下: ```java public enum Singleton { INSTANCE;...

    Java 单例模式 工具类

    本篇文章将深入探讨如何在Java中实现单例模式,以及如何创建一个工具类来封装单例的创建。 首先,让我们了解单例模式的几种常见实现方式: 1. 饿汉式(静态常量): 这是最简单的单例实现,它在类加载时就完成了...

    Java实现单例模式[汇编].pdf

    总的来说,单例模式在Java中有着重要的应用,开发者可以根据实际需求选择适合的实现方式。需要注意的是,虽然单例模式可以有效地管理和控制资源,但过度使用也可能导致系统设计过于复杂,难以测试和维护。在使用单例...

    设计模式——单例模式

    实现单例模式主要有两种方式:饿汉式和懒汉式。 ### **饿汉式单例模式** 饿汉式单例模式在类加载时就完成了实例化,因此也称为静态初始化。这种方式保证了线程安全,但可能会造成不必要的资源浪费,因为即使未使用...

    单例模式详解~~单例模式详解~~

    在Java中,实现单例模式有多种方式,但最常见的问题是线程安全问题。例如,上述代码展示了一个简单的单例实现,称为"饿汉式"单例,因为无论是否需要,它都会在类加载时立即创建实例。这种方式虽然简单,但在多线程...

    单例模式案例和笔记,通过案例来了解单例模式

    **枚举实现单例**: 这是Joshua Bloch在《Effective Java》中推荐的方法,枚举的实例化是线程安全的,并且自动防止了反射和序列化攻击。 每种模式都有其适用场景,例如,如果对性能和内存占用非常敏感,可以考虑...

    通过Java实现一个经典的单例模式示例代码.zip

    而使用枚举实现单例则是最为简洁和优雅的方式,它不仅线程安全,还能防止序列化和反射攻击。 在提供的文件“通过Java实现一个经典的单例模式示例代码.zip”中,包含了一个文档“通过Java实现一个经典的单例模式示例...

Global site tag (gtag.js) - Google Analytics