在编程中,有时候只需要生成一个对象实例,比如你手机里的某个APP,如果已经打开,再点击并不会打开一个新的,而是把已经打开的那个窗口显示出来,这就是单例的精神。
好了,上代码
/**
* 单例模式
* 生成唯一模式
*/
public class Main {
public static void main(String[] args) {
//生成第一个实例
BlackCat blackCat1 = Singleton.getInstance();
blackCat1.eat();
//生成第二个实例
BlackCat blackCat2 = Singleton.getInstance();
blackCat2.eat();
//看两个实例是否一样
System.out.println(blackCat1 == blackCat2);
}
}
public class BlackCat implements ICat {
public void eat() {
System.out.println("The black cat is eating!");
}
}
public class Singleton {
private static BlackCat blackCat;
/**
* 不允许通过构造方法产生实例
*/
private Singleton(){}
/**
* 生成唯一实例,该方法在高并发下是有问题的,待以后讨论
* @return 唯一实例
*/
public static BlackCat getInstance() {
if (blackCat == null) {
blackCat = new BlackCat();
}
return blackCat;
}
}
用法:
单例模式是很基础的设计模式,web后端编程中可以用在资源的加载上,让资源只加载一次,用法上没有什么可以讨论的空间,更深入的讨论是在高并发环境下如何保证只有一个实例。