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

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

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

模式如图:

单例模式

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

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设计模式——单例模式 单例模式应该是大家最为熟知的一种设计模式了,相信大家或多或少的都在自己的项目中使用过...
    gogoingmonkey阅读 540评论 0 2
  • 概念 java中单例模式是一种常见的设计模式,单例模式的写法有好几种,比较常见的有:懒汉式单例、饿汉式单例。单例模...
    怡红快绿阅读 497评论 0 0
  • 单例模式由于只创建了唯一对象可以避免资源的多重占用,减少内存的开销,对于经常性使用对象的类来说,单例是一个不错的选...
    InBinfen阅读 411评论 2 2
  • 单例模式在我们日常开发中算是使用频率最高的设计模式了,为什么单例模式的使用频率会这么高呢? 有时我们的对象会占用一...
    MrKing5946阅读 177评论 0 0
  • 单例模式是设计模式中使用最普遍的设计模式之一。它是一种对对象创建模式,主要用于产生一个对象的具体唯一实例,它可以确...
    凡星轨迹阅读 782评论 0 49