java设计模式------单例模式

该模式是与具体的项目业务无关的设计模式

单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。即一个类只有一个对象实例

模式如图:

java设计模式------单例模式_第1张图片
单例模式

单列模式有很多种,下面来一种一种的介绍。

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;  
    }  
}

你可能感兴趣的:(java设计模式------单例模式)