粗糙分析设计模式——单例模式
Posted Sun_TTTT
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了粗糙分析设计模式——单例模式相关的知识,希望对你有一定的参考价值。
一山不容二虎,哎 ,这次就粗糙讲解一下单例模式,单例模式是为了让系统中存在一个实例,避免同时存在两个实例下命令,试想一下,如果软件同时向打印机传递命令,那么打印机不就乱了嘛(卧槽,我该听谁的),所以,单例模式的存在是非常有必要的,同时,还能减少系统的开销,如果实例一个类开销非常大,单例模式也是非常实用的。
单例模式主要是由一下的几个分类:
- 懒汉式单例
- 饿汉式单例(这都是因为什么,单例这么萌,怎么都取这种名字)
登记式单例(忽略 忽略)
单例有以下几个特点:
单例只能有一个实例。
- 单例必须自己创建单一实例
单例必须给其他所有对象提供这一单一实例
下面po几段代码,详细讲解下
这是懒汉式(懒嘛,所以延迟加载,用的时候在创建实例)
public class Single
private Single mSingle = null;//延迟加载
private Single()//私有化构造方法,避免在外面创建实例
public static Single getSingle()
if (mSingle==null)
mSingle = new Single();
return mSingle;
如果考虑到多线程模式的话,又是一头包。多线程的话可以加一把锁
有下面几种方法
public class Single
private static Single mSingle = null;
private Single()
public static synchronized Single getSingle()//对方法加锁,每次获取实例时,都要加锁,消耗较大
if (mSingle==null)
mSingle = new Single();
return mSingle;
public class Single
private static Single mSingle = null;
private Single()
public static Single getSingle()
if (mSingle==null)
synchronized (Single.class) //只对单例创建时加锁,后面获取单例时就不用加锁,减少了消耗。
mSingle = new Single();
return mSingle;
public class Single
private Single()
private static class SingleInstance//内部类在创建时虚拟机会保证线程同步,这是最经济最省力的方式
private static final Single mSingle = new Single();
public static Single getSingle()
return SingleInstance.mSingle;
下面是饿汉式(管他呢,先把实例创建了再说)
public class Single
private Single()
private static final Single mSingle = new Single();//一上来就创建,不讲道理,所以是线程安全的,,天生骄傲。
public static Single getSingle()
return mSingle;
以上是关于粗糙分析设计模式——单例模式的主要内容,如果未能解决你的问题,请参考以下文章