什么是单例模式
有时我们只需要某个类只有一个对象,不希望有更多对象。比如数据连接对象只需要一个,
这种设计方法叫单例模式。
单例模式特点
- 单例类只有一个实例。
- 单例类必须自己创建唯一实例。
- 单例类必须能对外提供这个实例。
单例模式与静态类
了解了单例模式后,你一定会想到静态类。它和静态类很像,为何不干脆使用静态类?
实际上,它们是有一些区别的:
- 单例类可以继承和被继承,方法可以被重载,而静态方法不可以。
- 静态方法中产生的对象会在执行后被释放,不会一直存在于内存中。
- 静态类会在第一次运行时初始化,单例模式可以有其他的选择,即可以延迟加载。
- 基于2, 3条,由于单例对象往往存在于DAO层(例如sessionFactory),如果反复的初始化和释放,则会占用很多资源,而使用单例模式将其常驻于内存可以更加节约资源。
- 静态方法有更高的访问效率。
- 单例模式很容易被测试。
实现代码
-
Singleton.java
class Singleton { static private Singleton instance; private Singleton() { } public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }
-
Test.java
public class Test { public static void main(String[] args) { Singleton s1 = Singleton.getInstance(); System.out.println(s1); Singleton s2 = Singleton.getInstance(); System.out.println(s2); Singleton s3 = Singleton.getInstance(); System.out.println(s3); } }
-
输出结果
Singleton@7852e922 Singleton@7852e922 Singleton@7852e922
三个对象输出的结果一样,说明实际只创建了一个对象。