笔记来自2019求知讲堂零基础Java入门编程视频教程 https://www.bilibili.com/video/av76235341
单例(Singleton)设计模式
设计模式就是在大量的实践中总结和理论之后优选的代码结构、编程风格以及解决问题的思考方式。简单来说,就是在编程过程中总结出来的一些解决问题的套路。
而单例设计模式,就是采取某些方法保证整个软件系统中,某个类只能被被实例化一次,系统中只能存在这一个实例对象,并且该类只提供一个取得其实例对象的方法。
一般单例模式是为了解决实例化太复杂,太过耗时耗资源的问题。或者频繁的new新对象没有必要。
单例模式的设计思路:
- 首先保证构造方法是private的,这样就不能用new操作符在类外部产生对象
- 但可以在类内部创建对象,类内部应该提供某个静态方法以返回类内部创建的对象
- 静态方法只能访问类中的静态成员变量,所以指向类内部产生的该类对象的变量也必须定义成静态的。
实现方式——饿汉式
public class Single {
//私有构造
private Single() {
}
//私有的single类型的类变量
private static Single single = new Single();
//公有的获取Single对象的方法
public static Single getInstance() {
return single;
}
}
public class Test2 {
public static void main(String[] args) {
Single single1 = Single.getInstance();
Single single2 = Single.getInstance();
}
}
饿汉式方法提前创建一个实例对象,需要的时候直接获取它即可。
实现方式——懒汉式
public class Single {
//私有构造
private Single() {
}
//私有的single类型的类变量,最初为空
private static Single single = null;
//公有的获取Single对象的方法,首先判断要返回的对象是否为空
public static Single getInstance() {
if (single == null) {
single = new Single();
}
return single;
}
}
public class Test2 {
public static void main(String[] args) {
Single single1 = Single.getInstance();
Single single2 = Single.getInstance();
}
}
懒汉式方法的最开始是没有实例对象的,直到有第一个人调用,才new一个对象,之后再调用的都使用这个对象。
综上可以看出,不论调用多少次getInstance()方法,指向的都是类中同一个静态变量。