粗糙分析设计模式——单例模式

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;
    

以上是关于粗糙分析设计模式——单例模式的主要内容,如果未能解决你的问题,请参考以下文章

单例模式(饿汉式 懒汉式)

C++的单例模式为什么不直接全部使用static,而是非要实例化一个对象?

粗糙分析设计模式-原型模式

粗糙分析设计模式-原型模式

粗糙分析设计模式-策略模式

粗糙分析设计模式-策略模式