单例模式总结

1.名词解释。

单例,顾名思义就是在整个程序中只有一个对象。所有能实现这一目的的方法都是单例模式。

2.具体实现

(1)构造方法私有,确保外部类中不能new对象。

(2)提供方法供外部调用。返回对象。

3.多种单例的实现及优缺点比较

(1)饿汉式实现。

public class Singleton {

//静态成员变量 程序加载时就会创建对象

private static Singleton mInstance=new Singleton();

//构造方法私有

private Singleton(){

}

//公开方法,供外部调用获取对象

public static Singleton getInstance() {

return mInstance;

  }

}

缺点:程序加载就创建对象,会增加不必要的内存开销。

(2)懒汉式实现。

public class Singleton {

//静态成员变量

    private static Singleton mInstance;

    //构造方法私有

    private Singleton(){

}

//公开方法,返回对象

    public static Singleton getInstance() {

if(mInstance==null){

mInstance=new Singleton();

        }

return mInstance;

    }

}

与饿汉式差异:将创建对象操作移到公开方法中,判断对象为空则创建,不为空直接返回。

缺点:多线程操作时,不能确保单例。

(3)同步方法实现

public class Singleton {

//静态成员变量

    private static SingletonmInstance;

    //构造方法私有

    private Singleton(){

}

//公开方法,返回对象,增加synchronized关键字,

public static synchronized Singleton getInstance() {

if(mInstance==null){

mInstance=new Singleton();

        }

return mInstance;

    }

}

缺点:效率不高。

(4)同步锁加双重检查

public class Singleton {

//静态成员变量

    private static SingletonmInstance;

    //构造方法私有

    private Singleton(){

}

//公开方法,返回对象

    public static  Singleton getInstance() {

if(mInstance==null){

synchronized (Singleton.class){

if(mInstance==null){

mInstance=new Singleton();

                }

}

}

return mInstance;

    }

}

(5)加volatile关键字 (完美单例)

作用:1.防止重排序。2.线程可见性。

public class Singleton {

//静态成员变量

    private static volatile Singleton mInstance;

    //构造方法私有

    private Singleton(){

}

//公开方法,返回对象

    public static  Singleton getInstance() {

if(mInstance==null){

synchronized (Singleton.class){

if(mInstance==null){

mInstance=new Singleton();

                }

}

}

return mInstance;

    }

}

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

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,898评论 18 399
  • 废话不多说,自己进入今天的主题 1、面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: - 抽象:...
    传奇内服号阅读 7,028评论 1 31
  • 使用场景 要求生成唯一序列号的环境 在整个项目中需要一个共享访问点或共享数据例如一个Web页面上的计数器,可以不用...
    niaoge2016阅读 3,089评论 0 0
  • 打开手机,忽见“小狮子勇敢心”微信群里“你被移除出群”的消息,心中顿觉一疼!我犯什么错了吗,要被移除出群?再往前翻...
    陕州区王艳伟阅读 3,180评论 4 4
  • 昨晚半期考试成绩出来了,一直担心的语文果然是考的糟糕,这次算的五科成绩,政治也考的不理想,600的总分,考了430...
    琦丽_819e阅读 793评论 0 0