单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一
应用场合: 有些对象只需有一个的场景, 例如, 访问文件
作用: 保证整个应用程序中某个实例有且只有一个
类型:分为饿汉模式和懒汉模式
这是我们平时经常使用的class类
public class Singleon{
}
在使用这个class类的时候, 通常直接new
public class startActivity{
//通过默认的构造参数,我们可以创建多个实例
new Singleon();
new Singleon();
}
现在我们需要实现只创建一个实例
饿汉模式
为了安全,控制访问,static前的修饰符还是需要写私有的
如下就是我们一个最简单的饿汉模式的写法
为什么叫饿汉模式呢?
这就和这行代码的加载顺序有关了private static Singleton instace=new Singleton();
static静态成员属于类所有,当类加载时,就会去创建一个Singleton的实例, 不管用户是否去调用获取,该实例都已经加载
因为该实例迫不及待的就加载出来了, 所以称之为饿汉模式(早早的吃饱饱)
public class Singleton{
//1.修改默认的构造方法,不允许外部直接创建对象
private Singleton(){
}
//2.创建类的唯一实例
private static Singleton instace=new Singleton();
//3.提供一个用于获取实例的方法
public Singleton getInstace(){
return instance;
}
}
懒汉模式
不推荐如下写法,懒汉模式线程不安全,解决办法,看文章双重锁
https://www.jianshu.com/p/5636d9123e65
public class Singleton{
//1.修改默认的构造方法,不允许外部直接创建对象
private Singleton(){
}
//2.声明类的唯一实例,使用private static修饰
private static Singleton instance;
//3.提供一个用于获取实例的方法
public Singleton getInstace(){
//当外部类调用的时候再创建该实例
if(null==instance){
instance=new Singleton();
}
return instance;
}
}
饿汉模式,懒汉模式区别
名称 | 区别 | 是否线程安全 |
---|---|---|
饿汉模式 | 加载类时比较慢,运行时获取对象的速度比较快 | 线程安全 |
懒汉模式 | 加载类时比较快,运行时获取对象的速度比较慢 | 线程不安全 |