概述
单例模式大概是最基础的设计模式了,大家大概都知道单例模式类中的几个要点:
1. 构造方法私有
2. 具有一个指向自己实例的私有静态引用
3. 返回静态引用的静态公共方法
单例模式说明
定义:确保一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
类图:
优点:
- 在内存中只有一个对象,节省内存空间。
- 避免频繁的创建销毁对象,可以提高性能。
- 避免对共享资源的多重占用。
- 可以全局访问。
使用场景:
- 需要频繁实例化然后销毁的对象。
- 创建对象时耗时过多或者耗资源过多,但又经常用到的对象。
- 有状态的工具类对象。
- 频繁访问数据库或文件的对象。
- 所有要求只有一个对象的场景。
单例模式代码示例
饿汉模式和懒汉模式大家大概也都知道,所以我就不在重复说明这两个方式了。我现在要展示的是使用枚举的方式创建单例模式。按照《Effective Java》中的说法:单元素的枚举类型已经成为实现Singleton的最佳方法。用枚举来实现单例非常简单,只需要编写一个包含单个元素的枚举类型即可。
public enum Singleton {
/**
* 定义一个枚举的元素,它就代表了Singleton的一个实例。
*/
Instance;
/**
* 单例可以有自己的操作
*/
public void singletonOperation(){
//功能处理
}
}
使用枚举来实现单实例控制会更加简洁,而且无偿地提供了序列化机制,并由JVM从根本上提供保障,绝对防止多次实例化,是更简洁、高效、安全的实现单例的方式。