单例模式
单例模式,是一种思想,是一种常用的软件设计模式。
- 单例模式的含义
通过单例模式可以保证系统中, 应用该模式的这个类永远只有一个实例。即一个类永远只有一个对象实例。 单例是为了节约内存。 - 单例的应用场景:
在实际开发中,有很多业务对象永远只需要一个,无论启动多少次
我们只需要一个对象,例如任务管理对象,只需要一个对象。节约内存和性能。 因为对象越多内存占用越大,极有可能出现内存溢出!
单例模式的两种方式
- 饿汉单例设计模式
在用类获取对象的时候,对象已经提前创建好了。
设计步骤:
a.定义一个类,把构造器私有。
b.定义一个静态变量存储一个对象。
代码示例:
public class SingleInstanceDemo01 {
public static void main(String[] args) {
SingleInstance01 s1 = SingleInstance01.instance;
SingleInstance01 s2 = SingleInstance01.instance;
System.out.println(s1 == s2);
}
}
/** a、定义一个单例类 */
class SingleInstance01{
/** c.定义一个静态变量存储一个对象即可 :属于类,与类一起加载一次 */
public static SingleInstance01 instance = new SingleInstance01();
/** b.单例必须私有构造器*/
private SingleInstance01(){
System.out.println("创建了一个对象");
}
}
- 懒汉单例设计模式
在真正需要该对象的时候,才去创建一个对象(延迟加载对象)。
设计步骤:
a.定义一个类,把构造器私有。
b.定义一个静态变量存储一个对象。
c.提供一个返回单例对象的方法。
代码示例:
public class SingleInstanceDemo02 {
public static void main(String[] args) {
SingleInstance02 s1 = SingleInstance02.getInstance();
SingleInstance02 s2 = SingleInstance02.getInstance();
System.out.println(s1 == s2);
}
}
/** a、定义一个单例类 */
class SingleInstance02{
/** c.定义一个静态变量存储一个对象即可 :属于类,与类一起加载一次 */
public static SingleInstance02 instance ; // null
/** b.单例必须私有构造器*/
private SingleInstance02(){
System.out.println("创建了一个对象");
}
/**
d.必须提供一个方法返回一个单例对象
*/
public static SingleInstance02 getInstance(){
if(instance == null){
// 第一次来拿对象,创建对象
instance = new SingleInstance02();
}
return instance;
}
}