该模式是与具体的项目业务无关的设计模式
单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。即一个类只有一个对象实例
模式如图:
单例模式单列模式有很多种,下面来一种一种的介绍。
1.懒汉式,也是常用的形式。
public class SingletonClass{
private static SingletonClass instance=null;
//线程安全,但是延迟加载,去掉synchronized关键字,就线程不安全了
public static synchronized SingletonClass getInstance(){
if(instance==null){
instance=new SingletonClass();
}
return instance;
}
//构造函数是私有的,自己才可以用
private SingletonClass(){
}
}
2.:饿汉式,不延迟加载,线程安全
public class Singleton{
//在自己内部定义自己的一个实例,只供内部调用
private static final Singleton instance = new Singleton();
private Singleton(){
//do something
}
//这里提供了一个供外部访问本class的静态方法,可以直接访问
public static Singleton getInstance(){
return instance;
}
}
3.双重校验锁(DCL),延迟加载,线程安全
public class Singleton{
private static volatile Singleton instance=null;
private Singleton(){
//do something
}
//这个模式将同步内容下方到if内部,提高了执行的效率,不必每次获取对象时都进行同步,只有第一次才同步,创建了以后就没必要了。
//处理高并发的懒汉式
public static Singleton getInstance(){
if(instance==null){
synchronized(Singleton.class){
if(instance==null){
instance=new Singleton();
}
}
}
return instance;
}
}
4.静态内部类,延迟加载,线程安全
public class Singleton {
/**
* 类级的内部类,也就是静态的成员式内部类,该内部类的实例与外部类的实例
* 没有绑定关系,而且只有被调用到才会装载,从而实现了延迟加载
*/
private static class SingletonHolder {
private static Singleton instance = new Singleton();
}
private Singleton() {
}
public static Singleton getInstance() {
return SingletonHolder.instance;
}
}
网友评论