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”,你可以深入理解枚举单例模式的工作原理和应用场景。源码中的注释将帮助你更好地理解每个部分的作用,从而在实际开发中灵活运用这一模式。记住,在使用单例模式时,...
JAVA 枚举单例模式是一种特殊的单例模式实现方式,它使用枚举类型来保证线程安全、防止序列化问题和反射攻击。下面我们将详细解释这个模式的实现原理和源码分析。 线程安全 在 Java 中,枚举类型的实例是在类加载...
在Java中,实现单例模式有多种方法,每种都有其特定的优缺点和适用场景。以下是几种常见的单例模式实现方式: 1. **饿汉式(静态常量)**: 这是最简单的实现方式,它在类加载时就完成了初始化,因此是线程安全的...
以下是Java实现的六种单例模式的详细解释: 1. 懒汉式(Lazy Initialization): 这种方式延迟了单例对象的初始化,直到第一次被请求时。例如,`SingleInstance1.java`可能就实现了这种方式。代码通常包含一个私有...
静态内部类单例利用Java类加载机制保证了线程安全,而枚举单例则是Java中实现单例的最佳方式,因为它天然支持序列化且防止反射攻击。 在代码实现上,我们可以创建一个名为SingletonFactory的工厂类,其中包含一个...
而使用枚举实现单例模式则能确保线程安全,且避免了序列化问题,是Java推荐的一种实现方式。 ```java public enum Singleton { INSTANCE; private Properties properties; private Singleton() { // 加载配置...
本文将详细讨论四种常见的单例实现方式:饿汉模式、懒汉模式、双重检查锁定(DCL)单例模式以及枚举单例。 1. **饿汉模式**: 饿汉模式是在类加载时就完成了实例化,避免了线程同步问题。这种方式简单且安全,但...
Java中的枚举类型是线程安全的,并且只会装载一次,设计者充分考虑到了线程安全问题,因此使用枚举实现单例模式是一种简洁而且高效的解决方案。 6. 容器式单例(Singleton Holder) 通过一个私有的静态内部类...
在Java中,有多种实现单例模式的方法,每种都有其特点和适用场景。接下来,我们将深入探讨这些实现方式。 首先,我们来看**懒汉式(Lazy Initialization)**。这种实现方式是在类被首次请求时才创建单例对象,延迟...
在Java中,我们可以使用多种方式来实现单例模式: 1. **饿汉式(静态常量)**:这是最简单的单例实现方式,它在类加载时就完成了初始化,所以类加载比较慢,但获取对象的速度快,且线程安全。 ```java public class...
在实际开发中,我们还可以使用静态内部类或者枚举方式来实现单例模式,这些方法同样具有线程安全性和懒加载特性,而且代码更简洁。例如,使用枚举实现的单例模式如下: ```java public enum Singleton { INSTANCE;...
本篇文章将深入探讨如何在Java中实现单例模式,以及如何创建一个工具类来封装单例的创建。 首先,让我们了解单例模式的几种常见实现方式: 1. 饿汉式(静态常量): 这是最简单的单例实现,它在类加载时就完成了...
总的来说,单例模式在Java中有着重要的应用,开发者可以根据实际需求选择适合的实现方式。需要注意的是,虽然单例模式可以有效地管理和控制资源,但过度使用也可能导致系统设计过于复杂,难以测试和维护。在使用单例...
实现单例模式主要有两种方式:饿汉式和懒汉式。 ### **饿汉式单例模式** 饿汉式单例模式在类加载时就完成了实例化,因此也称为静态初始化。这种方式保证了线程安全,但可能会造成不必要的资源浪费,因为即使未使用...
在Java中,实现单例模式有多种方式,但最常见的问题是线程安全问题。例如,上述代码展示了一个简单的单例实现,称为"饿汉式"单例,因为无论是否需要,它都会在类加载时立即创建实例。这种方式虽然简单,但在多线程...
**枚举实现单例**: 这是Joshua Bloch在《Effective Java》中推荐的方法,枚举的实例化是线程安全的,并且自动防止了反射和序列化攻击。 每种模式都有其适用场景,例如,如果对性能和内存占用非常敏感,可以考虑...
下面将详细介绍七种常见的单例模式实现方式,并结合多线程环境和反序列化测试进行讨论。 1. **饿汉式单例**: 这是最简单的单例实现,它在类加载时就创建了实例,因此是线程安全的。 ```java public class ...
以下将详细介绍Java中实现单例模式的五种方法。 1. 饿汉式(静态常量) 这是最简单的单例实现方式,它在类加载时就完成了初始化,所以是线程安全的。饿汉式的优点是实现简单且线程安全,但缺点是如果单例对象长时间...
在Java、C#等面向对象语言中,实现单例模式有多种方法,下面我们将详细探讨五种常见的单例模式实现方式: 1. **饿汉式单例**: 这种方式是在类加载时就完成实例化,避免了线程同步问题。由于实例在类加载时已经...