单例模式
单例模式:就是一直以来只有一个类的实例对象,有些对象只需要一个时候,比如配置文件、工具类、线程池、缓存、日志对象等。
如果创造出多个实例,就会导致许多问题,比如占用过多资源,不一样的结果等。
通过单例模式,保证整个应用中的某个实例有且只有一个。
饿汉模式
package Singleton;
/**
* 单例模式:Singleton
* 应用场合:有些对象只需要一个就足够了。
* 作用:保证某个应用程序在某个实例有且只有一个。
*/
public class Singleton {
//将构造方法私有化,不允许外部直接创建对象
private Singleton(){
}
//创建类的唯一实例
private static Singleton singleton = new Singleton();
//给它一个方法,去获取实例
public static Singleton getSingleton(){
return singleton;
}
}
注意:这里对singleton进行封装。这样比较规范,不要把static变量直接暴露出来,容易让别人进行更改。
饿汉模式。在多线程中也是安全的,因为他初始化类就已经把该类创建出来了。
懒汉模式:
package Singleton;
public class Singleton2 {
//将构造方法私有化,不允许外部直接创建对象
private Singleton2(){
}
//创建类的唯一实例
private static Singleton2 singleton;
//提供一个用于获取实例的方法
public static Singleton2 getInstance(){
if(singleton == null){
singleton = new Singleton2();
}else {
return singleton;
}
}
}
因为创建类的时候需要时间,所以在高并发时,可能会创建多个类。线程不安全的。