概念:一套被反复使用的,多数人知晓的,通过分类,编目的代码设计经验的总结安全
优势: 都是优秀的使用案例函数
可提升代码的重用性工具
使得代码易于理解spa
保证代码的可靠性线程
现实生活中有些场景中的对象只能是一个,如:地球,一个国家的皇帝,配偶等等.项目中也会有这样的场景:配置文件,线程池,工具类,日志等等.设计
单例模式就是保证整个项目(应用)中的某个实例有且只有一个日志
为何用单例模式?对象
使用单例模式是为了不一些问题:如配置文件的读取,当有多个实例去读取时,当中的某一个修改了文件就会使得其余实例读取的内容不一致.例如线程池多个实例会过分的占用资源等等.资源
单例模式经常使用的(基本的)有两种:饿汉式和懒汉式get
//饿汉式
public class Sington1 {
//私有化构造函数
private Sington1(){
}
//建立对象
static Sington1 sington1 = new Sington1();
//提供访问方法
public static Sington1 getInstance(){
return sington1;
}
}
//懒汉式
public class Sington2 {
private Sington2(){
}
private static Sington2 sington2 = null;
public static synchronized Sington2 getInstance(){
if (sington2 == null) {
sington2 = new Sington2();
}
return sington2;
}
}
线程不安全:当有多个线程同时调用实例的获取方法,他们访问时实例是没有的,因此都能进入if模块中建立实例,这时就会建立多个实例
经过上面的代码能够看出,单例模式类编写的步骤:
1. 私有化构造方法,不容许外界随意使用
2. 建立一个对象,将其私有化,不容许外界直接访问
3. 提供一个访问对象的方法
两种方式的区别:
饿汉式在类加载的时候就建立了对象,全部加载的时候相对慢些;懒汉式在使用的时候才开始建立对象,这时它比较慢些.饿汉式是线程安全的,懒汉式是线程不安全的,想要使其安全能够加上关键字synchronized