(八)Java入门--单例设计模式


一、概念

保证一个类在内存中的对象唯一性。(单个实例设计模式)、
(在堆中只有一个对象;方法区保存着构造函数和公有方法等。)

二、设计步骤

(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;
}

注意:如果使用同步函数的方法,每次调用方法都会判断同步锁导致降低效率。

你可能感兴趣的:(Java入门)