一、概念
保证一个类在内存中的对象唯一性。(单个实例设计模式)、
(在堆中只有一个对象;方法区保存着构造函数和公有方法等。)
二、设计步骤
(1)私有化该类的构造函数(private)
(2)在本类中创建一个本类对象(private static)或者在方法中创建。
(3)定义一个公有的方法,将创建的对象返回(public static)。
三、代码样例
1、懒汉式:延迟加载对象形式,对象在公有方法建立;(存在多线程安全隐患)。
class SingleDemo1 {
private static SingleDemo1 s = null;
private SingleDemo1() { }
public static SingleDemo1 getInstance() {
if(s == null)
s = new SingleDemo1();
return s;
}
}
2、饿汉式:只要一旦加载类就创建对象。(开发用的多)
public class SingleDemo {
private static SingleDemo s = new SingleDemo();
private SingleDemo() { }
public static SingleDemo getInstance() {
return s;
}
}
四、多线程下的单例设计模式
1、懒汉式会出现安全问题:可能会创建多个对象,导致对象不唯一性。
2、解决:
public static SingleDemo1 getInstance() {
//只有在空的时候,才会出现隐患,不空了就不要判断锁
if (s == null) {
synchronized (SingleDemo1.class) {
if (s == null)
s = new SingleDemo1();
}
}
return s;
}
注意:如果使用同步函数的方法,每次调用方法都会判断同步锁导致降低效率。