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

通过枚举实现单例模式

 
阅读更多
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`可能就实现了这种方式。代码通常包含一个私有...

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

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

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

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

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

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

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

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

    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》中推荐的方法,枚举的实例化是线程安全的,并且自动防止了反射和序列化攻击。 每种模式都有其适用场景,例如,如果对性能和内存占用非常敏感,可以考虑...

    7种单例模式

    下面将详细介绍七种常见的单例模式实现方式,并结合多线程环境和反序列化测试进行讨论。 1. **饿汉式单例**: 这是最简单的单例实现,它在类加载时就创建了实例,因此是线程安全的。 ```java public class ...

    Java中的五种实现方法【单例模式】

    以下将详细介绍Java中实现单例模式的五种方法。 1. 饿汉式(静态常量) 这是最简单的单例实现方式,它在类加载时就完成了初始化,所以是线程安全的。饿汉式的优点是实现简单且线程安全,但缺点是如果单例对象长时间...

    五种单例模式

    在Java、C#等面向对象语言中,实现单例模式有多种方法,下面我们将详细探讨五种常见的单例模式实现方式: 1. **饿汉式单例**: 这种方式是在类加载时就完成实例化,避免了线程同步问题。由于实例在类加载时已经...

Global site tag (gtag.js) - Google Analytics