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 设计模式 ------ 单例模式的主要内容,如果未能解决你的问题,请参考以下文章