本文主要是介绍粗糙分析设计模式——单例模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一山不容二虎,哎 ,这次就粗糙讲解一下单例模式,单例模式是为了让系统中存在一个实例,避免同时存在两个实例下命令,试想一下,如果软件同时向打印机传递命令,那么打印机不就乱了嘛(卧槽,我该听谁的),所以,单例模式的存在是非常有必要的,同时,还能减少系统的开销,如果实例一个类开销非常大,单例模式也是非常实用的。
单例模式主要是由一下的几个分类:
- 懒汉式单例
- 饿汉式单例(这都是因为什么,单例这么萌,怎么都取这种名字)
登记式单例(忽略 忽略)
单例有以下几个特点:
单例只能有一个实例。
- 单例必须自己创建单一实例
单例必须给其他所有对象提供这一单一实例
下面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;}
}
这篇关于粗糙分析设计模式——单例模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!