> 文档中心 > 【Java 23 种设计模式】 单例模式(4)

【Java 23 种设计模式】 单例模式(4)


单例模式

保证一个类仅有一个实例,并提供一个访问它的全局访问点。

单例模式(Singleton)的目的是为了保证在一个进程中,某个类有且仅有一个实例。

因为这个类只有一个实例,因此,自然不能让调用方使用new Xyz()来创建实例了。所以,单例的构造方法必须是private,这样就防止了调用方自己创建实例,但是在类的内部,是可以用一个静态字段来引用唯一创建的实例的:

public class Singleton {    // 静态字段引用唯一实例:    private static final Singleton INSTANCE = new Singleton();    // private构造方法保证外部无法实例化:    private Singleton() {    }}

那么问题来了,外部调用方如何获得这个唯一实例?

答案是提供一个静态方法,直接返回实例:

public class Singleton {    // 静态字段引用唯一实例:    private static final Singleton INSTANCE = new Singleton();    // 通过静态方法返回实例:    public static Singleton getInstance() { return INSTANCE;    }    // private构造方法保证外部无法实例化:    private Singleton() {    }}

或者直接把static变量暴露给外部:

public class Singleton {    // 静态字段引用唯一实例:    public static final Singleton INSTANCE = new Singleton();    // private构造方法保证外部无法实例化:    private Singleton() {    }}

所以,单例模式的实现方式很简单:

  1. 只有private构造方法,确保外部无法实例化;
  2. 通过private static变量持有唯一实例,保证全局唯一性;
  3. 通过public static方法返回此唯一实例,使外部调用方能获取到实例。

单例对象(Singleton)是一种常用的设计模式。在 Java 应用中,单例对象能保证在一个 JVM
中,该对象只有一个实例存在。这样的模式有几个好处:
1、某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。
2、省去了 new 操作符,降低了系统内存的使用频率,减轻 GC 压力。
3、有些类如交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全
乱了。(比如一个军队出现了多个司令员同时指挥,肯定会乱成一团),所以只有使用单例模式,
才能保证核心交易服务器独立控制整个流程。

下载链接
https://download.csdn.net/download/qq_15604349/75668444