设计模式 — Singleton模式(单例模式)
只有一个实例
- 想确保任何情况下都绝对只有一个实例
- 想在程序上表现出”只存在一个实例”
只生成一个实例的模式被称作Singleton模式.Singleton是指只含有一个元素的集合.
单例模式可以分为懒汉式和饿汉式:
- 懒汉式单例模式:在类加载时不初始化
- 饿汉式单例模式:在类加载时就完成了初始化,所以类加载比较慢,但获取对象的速度快。
实例程序
名字 | 说明 |
---|---|
Singleton | 只存在一个实例的类 |
Main | 测试程序行为的类 |
饿汉式单例模式
/**
* <pre> Singleton类
* Singleton类的构造函数是Private的
* </pre>
*/
public class Singleton {
private static Singleton singleton = new Singleton();
private Singleton() {
System.out.println("生成一个实例");
}
public static Singleton getInstance() {
return singleton;
}
}
/**
* <pre> 测试类</pre>
*/
public class Main {
public static void main(String[] args) {
System.out.println("Start.");
Singleton obj1 = Singleton.getInstance();
Singleton obj2 = Singleton.getInstance();
if (obj1 == obj2) {
System.out.println("obj与obj2是相同的实例.");
} else {
System.out.println("obj与obj2是不同的实例.");
}
System.out.println("end.");
}
}
懒汉式单例模式
/**
* <pre> Singleton类 懒汉模式</pre>
*/
public class Singleton {
private static Singleton singleton = null;
private Singleton() {
System.out.println("生成了一个实例");
}
public static Singleton getInstance() {
if (singleton == null) {
singleton = new Singleton();
}
return singleton;
}
}
要点
- 为什么必须要设置限制
对实例的数量进行设置,防止实例之间互相影响造成bug.
何时生成这个唯一实例
饿汉模式: 类初始化的时候
懒汉模式: 第一次调用这个类方法的时候懒汉模式线程不安全
可用synchronized 修饰生成实例的方法.