单例模式又叫单体模式,是一种常见的软件设计模式。
单例模式的定义:一个类有且仅有一个实例,并且自行实例化提供给系统访问。
在日常生活中,地球只有一个,生命只有一次。同样,在计算机系统中,单例模式也普遍存在,比如:Windows程序管理器(explorer.exe)不能启动多个,打印机不能同时接收多份作业,通信端口不能同时被多个应用程序监听。所以,使用单例模式就是为了防止一个对象被多次创建。
饿汉式单例模式
Singleton1.java
public class Singleton1 {
private Singleton1() {
}
private static Singleton1 instance = new Singleton1();
public static Singleton1 getInstance() {
return instance;
}
}
TestSingleton1.java
public class TestSingleton1 {
public static void main(String[] args) {
Singleton1 st1 = Singleton1.getInstance();
Singleton1 st2 = Singleton1.getInstance();
System.out.println(st1 == st2);
}
}
懒汉式单例模式
Singleton2.java
public class Singleton2 {
private Singleton2() {
}
private static Singleton2 instance = null;
public static Singleton2 getInstance() {
if(null == instance) {
instance = new Singleton2();
}
return instance;
}
}
TestSingleton2.java
public class TestSingleton2 {
public static void main(String[] args) {
Singleton2 st1 = Singleton2.getInstance();
Singleton2 st2 = Singleton2.getInstance();
System.out.println(st1 == st2);
}
}
总结:
1. 什么是单例模式?
单例模式三元素:
(1) 构造方法私有化
(2) 静态属性指向实例
(3) public static的getInstance方法,返回静态属性
2. 恶汉和懒汉式的区别
(1) 恶汉式是线程安全,而懒汉式本身在并发时线程不安全的。
(2) 创建实例会消耗一定的时间,尤其是类似数据库的连接。恶汉式在程序启动时便创建实例,而懒汉是在第一次使用对象时创建。所以,才被称作“懒”汉。使用哪一种要看具体的业务需求了。