首先弄清楚什么是单例模式?
单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案
单例模式的特点:(单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例)
1.该类只能有一个实例
2.该类只能自己创建这个唯一实例,且别人对该类无法创建实例
3.该类提供一个公开的方法public,让所有类都能够访问该方法并能获得该类自己所创建的实例。
饿汉式单例模式与懒汉式单例模式的区别:(在于创建实例的时间不同)
顾名思义,饿汉式单例模式就是无论别人需不需要自己先自行创建一个实例再说,当别人通过公开方法访问时就已经创建好了,不需要再去创建。
而懒汉式单例模式则是等别人需要的时候才会去自己创建该类实例,即刚开始不会自己创建,而是当别人通过公共方法访问时则再创建。
饿汉式单例模式可能存在线程不安全,而懒汉式单例模式则会线程安全。
单例模式创建三部曲:
1.私有化构造方法
2.创建静态的实例对象
3.提供一个公开的静态方法返回该单例对象。便于别人访问
具体代码:
饿汉式单例模式:
//饿汉式单列模式 可以同时很多访问,线程不安全
package entity;
public class Single {
//构造器私有化,为了不让外部类实例化该类对象
private Single(){
}
//在该类内部实例化该类对象
private static final Single single=new Single();
//提供一个公开方法让外部访问该对象
public static Single getInstance(){
//直接返回该单例对象
return single;
}
}
懒汉式单例模式:
//懒汉式单例模式 线程安全
package entity;
public class Single {
//私有化构造方法 ,为了不让外部类实例化该对象
private Single(){}
//在该类内部定义该类对象
private static Single single=null;
//提供一个公开方法外部访问该对象
//synchronized是为该方法加锁,同一时间只能有一个线程访问得到执行。另一线程必须要等当前线程执行完该代码才可以执行该代码
public static synchronized Single getInstance(){
//判断是否为空
if(single==null){
//需要的时候则new
single=new Single();
}
return single;
}
}