使用enum关键字来实现单例模式的好处是可以提供序列化机制,绝对防止多次实例化,即使是在面对复杂的序列化或者反射攻击的时候。—— 来自《Effective Java》
【1】配置文件test.properties
#info a_text=I am text A b_text=I am text B
【2】枚举实例AppContext.java
package hhf.propertie; import java.io.IOException; import java.io.InputStream; import java.util.Properties; /** * 读取配置文件 * @author HHF * 2014年12月29日 */ public enum AppContext { INSTANCE; private volatile Properties configuration = new Properties(); public void init() { InputStream is = this.getClass().getResourceAsStream("/test.properties"); if (is != null) { try { this.configuration.clear(); this.configuration.load(is); } catch (IOException e) { } finally { try { is.close(); } catch (Throwable t) {} } } } public String getConfigValue(String key) { return this.configuration.getProperty(key); } }
【3】读取配置文件临时保存数据到常量内SystemConstants.java
package hhf.propertie; /** * 缓存配置文件信息 * @author HHF * 2014年12月29日 */ public class SystemConstants { //info public static final String DATA_A = AppContext.INSTANCE.getConfigValue("a_text"); public static final String DATA_B = AppContext.INSTANCE.getConfigValue("b_text"); }
【4】测试文件Main.java
public class Main { public static void main(String[] args) { AppContext.INSTANCE.init(); System.out.println(SystemConstants.DATA_A); System.out.println(SystemConstants.DATA_B); } }
一个enum常量(这里是INSTANCE)代表了一个enum的实例,enum类型只能有这些常量实例。标准保证enum常量(INSTANCE)不能被克隆,也不会因为反序列化产生不同的实例,想通过反射机制得到一个enum类型的实例也是不行的。
(PS;附上测试工程源码)
相关推荐
在Java编程领域,设计模式是一种被广泛采用...总结来说,本压缩包中的示例可能包括了不同实现方式的单例模式以及如何从配置文件中读取数据。这些知识点对于理解和应用Java设计模式以及进行有效的资源管理具有重要意义。
在上述的场景中,我们探讨了如何通过单例模式来优化读取配置文件的过程。配置文件是许多应用程序的重要组成部分,它们通常存储应用程序运行时需要的参数和设置。 在不用模式的解决方案中,我们创建了一个名为`...
在读取配置文件等场景下,使用单例模式可以有效地管理配置对象,确保数据一致性并节约系统资源。通过多种实现方式,如饿汉式、懒汉式、静态内部类和枚举单例,可以根据需求选择最适合的实现策略。
在实际应用中,我们可能需要读取配置文件来获取单例对象的属性或行为。例如,一个管理数据库连接的单例类,可以读取配置文件来设置数据库URL、用户名和密码。这样,整个程序只需一个数据库连接池,提高资源利用率。 ...
在提供的内容中,讨论了配置文件和其对应的Java类(ThirdConfig),这个类用于读取配置文件中的信息,并在内存中保持一个配置对象的实例。如果每次需要配置信息时都创建一个新的实例,那么就会有多次IO操作,并且...
1. **配置类**:如配置文件的读取和管理。 2. **缓存**:数据库查询结果的缓存,减少重复查询。 3. **日志服务**:在整个系统中,只需要一个日志服务来记录日志。 4. **线程池**:系统中只需要一个线程池来管理所有...
在Java或C#等面向对象的语言中,单例模式广泛用于控制资源的共享,比如数据库连接、线程池或者配置文件的读取等。这种模式的主要优点在于它可以减少系统内存中的对象数量,避免因为频繁创建和销毁对象而带来的性能...
在软件开发中,读取配置文件的类通常也会采用单例模式,因为频繁创建新对象来读取配置并不高效。网站的计数器使用单例模式可以保证数据同步,避免多线程环境下的计数混乱。日志应用通常也需要单例,因为共享的日志...
此外,可能还需要用到FileReader和BufferedReader等类来读取配置文件或用户设置。 6. **集合框架**:Java集合框架(如ArrayList或LinkedList)可能被用来存储音乐文件的信息,比如文件路径、歌曲名等。这些集合可以...
尽量减少频繁读取配置文件,考虑缓存配置信息。 15. **数据库连接池**:合理使用数据库连接池可以提高数据库访问性能,但过多的打开和关闭连接会增加池的负担,应使用`using`语句管理连接。 通过理解并避免这些...
9. **设计模式**:"连连看"源码中可能会使用到单例模式(如全局的GameManager)、工厂模式(创建棋子对象)等设计模式,以提高代码的可维护性和复用性。 通过分析这个"连连看"的源程序,我们可以深入理解Java GUI...
20. **设计模式**:常见的设计模式如工厂模式、单例模式、观察者模式、装饰器模式等。 以上知识点涵盖了Java开发中的关键部分,通过"java100例"的实例学习,可以帮助初学者逐步建立坚实的Java编程基础,同时对有...
- 示例代码展示多态的实现方法及其优势。 **关于继承与实现的问题** - **继承**:子类继承父类的所有属性和方法。 - **实现**:通常指实现接口,即实现接口中声明的所有抽象方法。 - 示例代码说明两者之间的区别...
11. **设计模式**:可能涉及到单例模式(Singleton)来维护全球唯一的首都数据源,工厂模式(Factory)来创建城市对象,或装饰器模式(Decorator)来扩展城市类的功能。 12. **异常处理**:在处理数据或网络请求时...
6. **设计模式的典型应用**:单例模式、工厂模式、观察者模式等设计模式在Java编程中非常常见,它们提供了解决特定问题的标准结构和"典型"实现。 7. **JVM内存模型的典型配置**:Java虚拟机(JVM)的堆内存、栈内存...