现实生活中,我们常常会发现有些事物是唯一的。例如某个商店有且只有一个老板。
在Java中,我们会创建商店类和老板类,并在商店中实例化老板实例。
/**
* 商店
*/
public class Shop {
public static void main(String[] args) {
Master master1 = new Master();
Master master2 = new Master();
}
}
问题是,一个商店类里面还是可以实例化多个老板,这不符合要求。
单例模式就是为了解决这个问题,保证有且只有一个实例存在。
首先在老板类中创建一个唯一的私有静态实例(在单例类中先实例化自己),并把构造方法变为私有,这样别人无法实例化这个类,最后再写一个公开静态方法返回实例即可,具体看代码:
/**
* 老板
*/
public class Master {
/**
* 创建一个静态私有老板实例,这就是唯一实例
*/
private static Master master = new Master();
/**
* 私有化构造函数使得外部无法实例化老板类
*/
private Master() {
}
/**
* 访问方法使得外部可以访问那个唯一的实例
*/
public static Master getInstance() {
return master;
}
}
然后就可以使用getInstance方法进行访问了:
/**
* 商店
*/
public class Shop {
public static void main(String[] args) {
Master m = Master.getInstance();
}
}
通过这种方式,我们调用的老板实例永远只有一个,也就是Master类中的那个唯一的实例。