一、单例模式又叫做 Singleton模式,指的是一个类,在一个JVM里,只有一个实例存在。
二、原理
通过私有化构造方法,不让外部通过new方式得到对象实例。
单例模式分为饿汉模式和懒汉模式。
三、饿汉模式
此方式无论如何都会创建一个实例。
代码:
public class Man{
//私有化其构造方法
private Man(){
}
//用一个私有静态类属性指向一个实例
private static Man instance = new Man();
//用一个静态类方法,返回上述实例
public static Man getInstance(){
return instance;
}
}
饿汉模式是立即加载的方式,无论是否会用到这个对象,都会加载。
三、懒汉模式
只有在调用getInstance()方法时,才会创建实例。
代码:
public class Man(){
// 私有化构造函数
private Man(){
}
//创建静态类变量,赋值为空
private static Man instance = null;
//
public static Man getInstance(){
//第一次调用时,发现instance不指向任何对象,便创造实例
if (null == instance){
instance = new Man();
}
return instance;
}
}
懒汉模式是延迟加载的方式,只有使用的时候才会加载。
四、两种方式的应用场合
饿汉模式:如果在构造方法里写了性能消耗较大,占时较久的代码,比如建立与数据库的连接,那么就会在启动的时候感觉稍微有些卡顿。
懒汉模式:使用懒汉式,在启动的时候,会感觉到比饿汉式略快,因为并没有做对象的实例化。 但是在第一次调用的时候,会进行实例化操作,感觉上就略慢。
如果业务上允许有比较充分的启动和初始化时间,就使用饿汉式,否则就使用懒汉式
五、单例模式的三要素
- 构造方法私有化
- 静态属性指向实例
- public static的 getInstance方法,返回第二步的静态属性
网友评论