[设计模式] - No.8 Singleton模式

版权声明:Copyright©TJU YanMing https://blog.csdn.net/tjuyanming/article/details/84783797

Singleton模式

在程序运行的时候常常是使用new的方法创建一个实例。对于某一个类(例如工具类),如果我们希望在任何情况下该类只有一个实例的话,我们需要使用单例模式。单例模式是很简单又被广为使用的一个设计模式:

public class Singleton {

    //饿汉模式
    private static Singleton singleton = new Singleton();
    private Singleton(){
        System.out.println("生成唯一的实例");
    }

    public static Singleton getSingleton(){
        return singleton;
    }
}

在程序运行时,当Singleton首次被加载的时候,我们即创建了一个singleton对象。当getSingleton函数被调用的时候,我们将这个对象的引用返回给外部调用。这样的话,不管调用多少次,getSingleton函数返回的总是类加载时创建的singleton对象。

可使用Main中的函数判断两个实例是否为同一个对象:

public class Main {

    public static void main(String[] args) {
        Singleton s1 = Singleton.getSingleton();
        Singleton s2 = Singleton.getSingleton();
        System.out.println(s1==s2?"s1 和 s2 相同":"s1 和 s2 不相同");
    }
}

生成唯一的实例
s1 和 s2 相同

上面的方法又被称为饿汉模式,因为他总是在类刚刚加载的时候即创建实例对象。还用一种单例的实现方式被称为懒汉模式,实现如下:

public class Singleton {
    //懒汉
    private static Singleton singleton =null;
    private Singleton(){
        System.out.println("生成唯一的实例");
    }
    public synchronized static Singleton getSingleton(){
        if(singleton == null) {
            singleton = new Singleton();
        }
        return singleton;
    }
}

可以看到,与饿汉模式不同的是,懒汉模式在最初是的时候仅仅创建一个null的空引用,当首次调用getSingleton的时候,由于singleton的引用为空,所以会创建一个新的实例对象。在后续调用的时候,都只返回这一个实例即可。

猜你喜欢

转载自blog.csdn.net/tjuyanming/article/details/84783797