保证一个类在内存中的对象唯一性。(单个实例设计模式)、 (在堆中只有一个对象;方法区保存着构造函数和公有方法等。)
(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; }注意:如果使用同步函数的方法,每次调用方法都会判断同步锁导致降低效率。
