Java 设计模式 ------ 单例模式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 设计模式 ------ 单例模式相关的知识,希望对你有一定的参考价值。

  在程序开发中,有时我们只需要一个对象就可以了,如日志对象,工具类,怎么样保证整个应用程序中有且只有一个对象呢?这就要用到单例模式了,通过名字就可以看出来,它就是保证整个应用程序中只有一个实例的。单例,单例,就是单个实例。现在我们就看一下怎么用Java代码实现单例模式。

  首先用Eclipse 创建一个Java项目,然后在src目录下新建一个Singleton类,这个类就是用于创建单个对象,再新建一个Test类用于测试,最好还是指定一个包名

技术分享图片

  我们都知道创建对象上时候,要调用类的构造函数,但是每调用一次,都会创建一个新的对象,这和我们的创建单个对象不符。那要怎么办呢?首先不能让外界调用类的构造函数,就是让构造函数函私有化

// 构造函数私有化
private Singleton() {
        
}

  构造函数私有化之后,我们不能在外面创建对象了,但又引来了另外一个问题,我们需要的那一个对象也无法创建了,这就要对外提供一个方法来创建对象。我们在本类中创建一个对象,然后提供一个方法暴露出去,因为我们在本类是可以调用构造函数的。

    // 对象的唯一实例
    private static Singleton instance = new Singleton();
    
    // 提供一个用于获取实例的方法
    public static Singleton getInstance() {
        return instance;
    }    

  这时我们就可以在外面通过类名获取了,在Test类中测试一下

public class Test {

    public static void main(String[] args) {
        Singleton s1 = Singleton.getInstance();
        Singleton s2 = Singleton.getInstance();
        
        System.out.println(s1 == s2);  // true
    }

}

  创建的两个对象s1, s2相等,证明,它们是同一个对象。以上单例模式的创建方式称之为‘饿汉式‘,因为当类一加载的时候,这个唯一的对象就创建了。 

  现在我们再来考虑创建单例对象的另外一种模式, 称之为‘懒汉式’, 就是我们在声明私有属性的时候,不去创建对象,只有在调用实例的时候才会去创建单例对象;

public class Singleton {
    
    // 构造函数私有化
    private Singleton() {
        
    }
    
    // 只声明了一个对象,而没有进行赋值
    private static Singleton instance;
    
    // 提供一个用于获取实例的方法
    public static Singleton getInstance() {
        if(instance == null) {  // 当第一次调用的时候,创建单例对象
            instance = new Singleton();
        }
        return instance;
    }
}

   

以上是关于Java 设计模式 ------ 单例模式的主要内容,如果未能解决你的问题,请参考以下文章

java 单例模式这个要怎么理解?

Java设计模式--单例模式(代码详解懒汉饿汉模式)

Java中的单例模式

Java设计模式之单例模式

Java 设计模式——单例模式 理论代码相结合

Java模式设计之单例模式(二)