单例模式学习笔记

来源:互联网 发布:dx9.0c修复软件 编辑:程序博客网 时间:2024/06/08 01:11

今天想把工作和生活中接触到的一些设计模式总结一下,所以就有了写篇笔记类型文章的想法。下面我就写一下单例设计模式。我是做android开发的,所以思想可能和后端的思想不一样。

一,单例设计模式的意义

单例模式,就是应用运行时,如果需要某一个单例模式的类的对象时,这个对象只能有一个,不能有多个,即不能重复创建。这样可以减少对象创建的开销,提高应用性能。
代码编写思想:构造方法私有,使外界不能使用new来创建对象;提供一个静态方法,返回一个实例对象。

二,单例模式的几种写法

1 ,饿汉式写法

// 单例模式 (饿汉式,不存在多线程同步问题,//但是假如这个类被加载时,我们并没有使用它的实例对象,//那么在内存中instance对象就是无用的创建)public class Singleton1 {private Singleton1() {}private static Singleton1 instance = new Singleton1();public static Singleton1 getInstance() {    return instance;    }}

2 ,懒汉式写法第一种

/** * 单例模式(懒汉式,线程不安全) */public class Singleton2 {private Singleton2() {}private static Singleton2 instance = null;public static Singleton2 getInstance() {    if (instance == null) {        instance = new Singleton2();    }    return instance;    }}   

3 ,懒汉式写法第二种

/**     * 单例模式(懒汉式,线程安全,效率比2低)     *     */public class Singleton3 {    private Singleton3() {    }private static Singleton3 instance = null;// 给方法加锁,避免在多线程访问的时候重复初始化。//但是在这个方法被频繁调用时,效率较低public static synchronized Singleton3 getInstance() {    if (instance == null) {        instance = new Singleton3();    }    return instance;    }}

4 ,懒汉式写法第三种

/** * 单例模式(懒汉式,线程安全,效率比3高) */public class Singleton4 {    private Singleton4() {}private static Singleton4 instance = null;public static Singleton4 getInstance() {    if (instance == null) {        // 在此处加锁,只有在对象实例不存在时,才同步代码块,        //保证多线程访问时对象在第一次被创建后不再被重复创建。        // 效率比在方法上加锁要高一些        synchronized (Singleton4.class) {            if (instance == null) {                instance = new Singleton4();            }        }    }    return instance;    }}   

5 ,对于最后一种懒汉式写法,好像说也有一些问题,搜了搜网上的相关资料,看有一种写法是在4的写法上把instance对象用volatile修饰下。

// volatile修饰的变量在线程每次使用的时候都会读取变量修改后的最后的值// volatile很容易被误用,用来进行原子性操作private static volatile Singleton5 instance = null;

三,总结

上面写了共计五种单例模式的写法,其中饿汉式一种,懒汉式四种。单例模式在代码编写方面大名鼎鼎,面试什么的好像提问几率很高,不过这个好像也是以前的事了,最近一段时间面试问的问题好像都更深了。写了写单例模式,忽然想不起我们项目中那里用到了单例模式,翻了翻代码,看到好像只有User类用到了,用的还是饿汉式。好吧,记个笔记,以谋将来。

0 0
原创粉丝点击