设计模式:Singleton模式

单例模式,比较简单,主要是为了提供一种创建对象的方式,涉及到一个单例模式的类,负责创建自身类型的对象,同时确保只有单个对象被创建,那么对于该唯一的对象的访问方式,可以直接访问,而不需要实例化对象来完成

因此这样来说就要求:

Singleton类只能有一个实例

Singleton类创建自身的唯一实例

Singleton类给所有其他对象提供该实例

下面的案例主要验证所创建的实例唯一

创建的类:

Singleton类:单例模式的类

Main类:测试类

首先是Singleton类

定义一个Singleton类型static成员变量,初始化指向Singleton类的实例,由于是static,因此在该单例类被加载的时候才进行初始化

Singleton类构造函数定义为private,这样Singleton类外部就没法调用构造函数,如果从其它外面new Singleton()无法编译通过;这样也更保证任何情况下只生成一个实例

getInstance方法,提供给Singleton类外部调用者来获取Singleton类唯一的实例

package singleton;

/**
* Copyright (C), 2014-2018, maoxiaomeng.com
* FileName: Singleton
* Author: lihui
* Date: 2018/5/1 16:38
*/

public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {
System.out.println("生成了一个实例");
}

public static Singleton getInstance() {
return instance;
}
}

然后就是main,通过调用两次Singleton的getInstance方法,来确认是否获取的是同一个实例

package singleton;

/**
* Copyright (C), 2014-2018, maoxiaomeng.com
* FileName: Main
* Author: lihui
* Date: 2018/5/1 16:40
*/

public class Main {
public static void main(String[] args) {
System.out.println("Start...");
Singleton obj1 = Singleton.getInstance();
Singleton obj2 = Singleton.getInstance();
if (obj1 == obj2) {
System.out.println("obj1和obj2是相同的实例");
} else {
System.out.println("obj1和obj2是不同的实例");
}
System.out.println("End...");
}
}

 

单例模式就单例类Singleton这一个角色,包括一个返回唯一实例的static方法以及获取该实例的getInstance方法

可见生成唯一的实例是因为static变量的缘故,在第一次调用getInstance方法的时候,Singleton类会初始化,同时static字段的变量singleton也被初始化,生成了这个唯一的变量

发表回复