设计模式之单例模式

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

2:单例模式的特点
2.1、单例类只能有一个实例。
  2.2、单例类必须自己创建自己的唯一实例。
  2.3、单例类必须给所有其他对象提供这一实例。

3:最简单的单例模式,也称之为饿汉式

public class Singleton {
    
    public static Singleton mSington = new Singleton();
    
    
    private Singleton() {
        // TODO Auto-generated constructor stub
    }
}

4:懒汉式 (线程不安全),为什么叫做懒汉式,主要静态实例一开始并没有初始化,而是使用的时候才开始进行初始化。同时,下面这种写法是不安全的。

public class Singleton {
    
    public static Singleton mSington ;// = new Singleton();
    
    public static Singleton getInstance(){
        if (mSington == null) {
            mSington = new Singleton();
        }
        return mSington;
    }
    
    private Singleton() {
        // TODO Auto-generated constructor stub
    }
}

5:这也是懒汉式,不过加了synchronized关键字,在多线程调用的时候是安全的,性能相对来说比较差。

public class Singleton {
    
    public static Singleton mSington ;// = new Singleton();
    
    public static synchronized Singleton getInstance(){
        if (mSington == null) {
            mSington = new Singleton();
        }
        return mSington;
    }
    
    private Singleton() {
        // TODO Auto-generated constructor stub
    }
}

6:变种饿汉式(使用静态代码块去初始化),这种也是线程不安全的。

public static Singleton mSington ;// = new Singleton();
    
    static{
        mSington = new Singleton();
    }

7:DCL单例(double check),这是单例99%的情况下都是线程安全的,不过在高并发下,也会导致异常。具体需要去分析字节码加载进jvm的情况、

public class Singleton {
    
    public static Singleton mSington ;// = new Singleton();
    
    public static Singleton getInstance(){
        if (mSington == null) {
            synchronized (Singleton.class) {
                if (mSington == null) {
                    mSington = new Singleton();
                }
            }
        }
        return mSington;
    }
    
    private Singleton() {
        // TODO Auto-generated constructor stub
    }
}

总而言之,到最后,单例模式无非就是在内存中只有一份实例。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 本文主要参考 那些年,我们一起写过的“单例模式”。 何为单例模式? 顾名思义,单例模式就是保证一个类仅有一个...
    tandeneck阅读 2,531评论 1 8
  • 最近学习了Java的几种常规的设计模式,内容较多,思维方式多种多样,故将所学整理一下,写成博客,分享并加深自己的理...
    Airing阅读 856评论 1 10
  • 一.什么是单例模式 单例模式的定义:确保一个类只有一个实例,并提供一个访问他的全局访问点。单例模式是几个设计模式中...
    Geeks_Liu阅读 2,240评论 0 10
  • 单例模式应该是大家最为熟知的一种设计模式了,相信大家或多或少的都在自己的项目中使用过单例模式,例如封装一个Log工...
    晨鸣code阅读 449评论 3 2
  • 大话设计模式之___单例模式 什么是单例模式单例模式有哪些(会顺带讲些懒汉式的性能优化)懒汉式与饿汉式的区别 什么...
    Agelier阅读 1,831评论 0 10