1. 单例模式
单例模式是我们在开发过程中使用最多的一种设计模式。单例模式定义与作用就是保证整个程序中某个实例有且只有一个。我们都知道创造实例是通过构造方法来实现的,只要有构造方法,就可以创建实例。
2. 饿汉模式
- 私有构造方法
- 创建私有静态实例(对象)
- 公共静态方法,返回静态实例
/**
* 单例模式 饿汉模式
* @author Administrator
*/
public class Person2 {
private static Person2 person = new Person2();
private Person2() {}
public static Person2 getInstance() {
return person;
}
}
3. 懒汉模式
- 私有构造方法
- 初始化静态实例(初始值为null)
- 公共静态方法,返回静态实例
/**
* 单例模式 懒汉模式
* @author Administrator
*/
public class Person {
private static Person person = null;
private Person() {
}
public static Person getInstance1() {
if(person == null) {
person = new Person();
}
return person;
}
}
4. 两种方式的对比
- 饿汉模式的特点是加载类时比较慢,但运行时获取对象的速度比较快,线程安全。
- 饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变。
- 懒汉模式的特点是加载类时比较快,但是在运行时获取对象的速度比较慢,线程不安全, 懒汉式如果在创建实例对象时不加上synchronized则会导致对象的访问不是线程安全的。
- 推荐使用饿汉模式。
/**
* 单例模式 懒汉模式 -- synchronized
* @author Administrator
*/
public class Person {
private static Person person = null;
private Person() { }
//同步方法
public static synchronized Person getInstance1() {
if(person == null) {
person = new Person();
}
return person;
}
public static Person getInstance() {
//同步代码块
synchronized (Person.class) {
if (person == null) {
person = new Person();
}
}
return person;
}
}