Singleton模式指一个类型只能生成一个对象,且不能复制。必须满足:
- 构造、拷贝和解析函数都是private
- 需要用静态成员变量空值对象个数,保证不重复
- 需要有静态的构造函数和析构函数
懒汉模式
我很懒,直到第一次调用类实例时才创建一个新的该类实例
使用双检索实现
public class Singleton {private static volatile Singleton singleton;private Singleton() {}public static Singleton getInstance() {if (singleton == null) { //第一次判断synchronized (Singleton.class) { //加所if (singleton == null) { //第二次判断singleton = new Singleton();}}}return singleton;}}
饿汉模式
在程序开始时创建该类的实例
public class Singleton {private static Singleton singleton;static {instance = new Singleton();}private Singleton() {}public Singleton getInstance() {return singleton;}}
静态内部类
效果类似双检锁,但实现更简单。只适用于静态域。
public class Singleton {private Singleton() {}private static Singleton getInstance() {}public static class Innerclasses {private ststic final Singleton singleton = new Singleton();};};
