个人认为,单例模式是GOF23种设计模式中最简单的一个,没有之一,就不做过多介绍了,直奔主题 。

A、介绍

    Singleton拥有一个私有构造函数,确保用户无法通过new直接实例化它。除此之外,该模式中包含一个静态私有成员变量instance与静态公有方法Instance()。Instance方法负责检验并实例化自己,然后存储在静态成员变量中,以确保只有一个实例被创建。


B、意义
    希望对象只创建一个实例,并且提供一个全局的访问点。
    一句话:同一个类在一个程序中有且仅能有一个实例。
    目的:生成只有一个实例的类。


C、结构
类似于封装字段,而这是将一个类作为一个static对象进行封装,且只有get,没有set,使其不能再次被实例化。单例模式有多种实现方式,其结构分别如下:
I.饿汉式(定义时赋值)
1.定义一个static对象,值为自己的一个new实例
2.定义一个static方法,返回这个实例
II.懒汉式(首次使用时赋值)
1.定义一个static对象,不赋值
2.定义一个static synchronized方法:如果上一步的static对象为空,返回一个new实例;如果不为空,返回static对象
III.精简饿汉式(本质是一个静态对象)
通过修饰符static final声明实例,static表现出单例特征,final表现出只读特征,不能再次被实例化


D、实例
I、饿汉式
public class Singleton{
    private static Singleton instance = new Singleton();
    private Singleton(){
    }
    public static Singleton getInstance(){
        return instance;
    }
}


II、懒汉式
public class Singleton{
    private static Singleton instance = null;
    private Singleton(){
    }
    public static synchronized Singleton getInstance(){        //此处要加锁,以防止多线程的错误判断产生的错误赋值,.Net可使用lock或Monitor
        if (instance != null) {
            return instance;
        }
        else {
            return new Singleton();
        }
    }
}
III、精简饿汉式
public class Singleton{
    public static final Singleton INSTANCE = new Singleton();
}