Java中的单例类

定义:

如果一个类始终只能创建一个实例,则称这样的类为“单例类”(SingleTon)。


应用场景

在一些特殊的场景下,要求不允许自由的创建该类的对象,而只允许为该类创建一个对象。

为了避免其他类自由的创建该类的实例,我们使用private关键字标记标记该类的构造器,从而隐藏该类所有的其他构造器。


语法规则

< 1 > 构造器:使用private关键字修饰,隐藏其他所有的构造器。
< 2 > 成员方法:使用public关键字修饰,用于创建该类的实例;需要static关键字限定,
因为调用该方法之前还不存在且不能存在对象,所有调用该方法的不能是对象,只能是类。
< 3 > 成员变量:private static 修饰,用来保存曾经创建的对象,起到缓存的作用,
通过这种方法可以知道该类是否曾经创建过对象,从而保证了只创建该类的一个对象。


实例

< 1 > SingleTon.java 类的构造:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**
* Created by dm on 15/10/28.
*/
public class SingleTon {

private static SingleTon instance; // 使用一个变量来缓存创建过的对象
private SingleTon() { } // 对构造器使用private修饰,隐藏该构造器

/**
* 提供一个静态方法,用于返回该类的实例;
* 该方法可以加入自定义控制,保证只产生一个实例。
*
* @return instance
*/
public static SingleTon getInstance() {

// 如果instance == null 表明还未创建过该类的实例
// 如果instance != null 表明已经创建过该类的实例
// 从而保证只创建该类的一个实例
if(instance == null) {
instance = new SingleTon(); // 缓存该类的实例
}

return instance;
}
}

< 2 > MainTest.java 使用测试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**
* Created by dm on 15/10/28.
*/
public class MainTest {
public static void main(String[] args) {
// SingleTonTest
// 不能通过该类的构造器生成对象,只能通过类调用实例
SingleTon singleTon1 = SingleTon.getInstance();
SingleTon singleTon2 = SingleTon.getInstance();

// 单例类使得只产生一个对象,指向同一块内存地址,故返回:true
System.out.println("singleTon1 == singleTon2 ??? ");
System.out.println(singleTon1 == singleTon2);
}
}
0%