一.什么是单例模式?
单例模式(Singleton Pattern)是一种常用的设计模式,它保证在整个应用程序中,某个类只有一个实例。
二.使用单例模式有什么好处?
(1)当一个对象在多个类同时new的时候就可以使用单例模式,它提供了一个全局的访问点,可以方便地在应用程序的任何地方使用该实例。
(2)节省资源:单例模式只创建一个实例
(3)数据共享:在多个模块中一起用一个实例。
单例模式在需要确保对象唯一性,全局访问和节省资源的情况下非常有用!
三.使用场景
(1)需要频繁创建对象和销毁对象
(2)需要使用一个全局对象
(3)需要在整个应用程序中共享一个对象
四.单例模式的实现步骤
(1)不让外界的人随意new ——> 构造方法私有化
(2)dao内部自己来new一个对象 ——> 静态
(3)提供一个公有的方法,让别人可以访问你这个对象
五.单例模式的主要划分
(1)懒汉模式:顾名思义就是很懒,在调用方法的时候才会去new,会导致多线程竞争的问题 ——> 以时间换空间
(2)饿汉模式:顾名思义一来就非常饿,一来就先new一个对象,不管你有没有用到,会造成空间浪费 ——>以空间换时间
(3)静态内部类模式:在类加载的时候就创建了唯一的实例,并且该实例被隐藏在静态内部类中,这样可以避免多线程竞争的问题。
(4)枚举模式:使用枚举来实现单例模式,这样可以保证在整个程序运行期间,只有一个实例。
六.代码实现
(1)懒汉模式
//懒汉模式---先不着急实例化,调用的时候在进行实例化
public class A{
private static A a; //静态,在内部自己来new
private A(){} //不让外界随意用,构造方法私有化
//提供公有的方法,返回类型为A类的类型,让外界可以调用
public static A getInstance(){
if(a == null){
//如果a对象为空就实例化,不是为空则就说明对象存在,就不用每次都new一下
a = new A();
}
return a;
}
}
(2)饿汉模式
//饿汉模式 --- 一来就实例化,不管你有没有用到
public class A{
private static A a = new A(); //内部私有化实例化
private A(){} //不让外界随意new使用---构造方法私有化
//提供一个公有的方法,让别人来访问这个对象
public static A getInstance(){
return a;
}
}
(3)静态内部类模式
public class A{
//静态内部类
private static class B{
private static final A INSTANCE = new A(); //常量的命名规则一般是大写
}
private A() {
}
public static A getInstance() {
return B.INSTANCE;
}
}
(4)枚举模式
//使用枚举来实现单例模式
public enum A{
INSTANCE;
public void doSomething() {
// do something
}
}