对于Java来说单例模式可以有以下几种方式:
- 饿汉方式
- 懒汉方式
- 双重检查加锁懒汉方式
- 内部类方式
- 枚举方式
破解单例模式有两种方式:通过反射的方式和通过序列化的方式。下面将一一对此进行分析。
饿汉方式非常简单,即使用一个初始化的静态变量,代码如下:
1 |
public class EagerSingleton {
|
2 |
private static final EagerSingleton instance = new EagerSingleton(); |
4 |
private EagerSingleton(){} |
6 |
public static EagerSingleton getInstance() {
|
懒汉模式和饿汉模式类似,只是静态变量定义时不进行初始化,调用getInstance()时才进行初始化,这就需要考虑多线程时问题,使用synchronized关键字修饰方法即可:
02 |
private static LazySingleton instance = null ; |
03 |
private LazySingleton() {} |
04 |
public static synchronized LazySingleton getInstance() {
|
05 |
if (instance == null ) {
|