个人认为,单例模式是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(){
if (instance != null) {
return instance;
}
else {
return new Singleton();
}
}
}
III、另类式
public class Singleton{
public static final Singleton INSTANCE = new Singleton();
}