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

一山不容二虎,哎 ,这次就粗糙讲解一下单例模式,单例模式是为了让系统中存在一个实例,避免同时存在两个实例下命令,试想一下,如果软件同时向打印机传递命令,那么打印机不就乱了嘛(卧槽,我该听谁的),所以,单例模式的存在是非常有必要的,同时,还能减少系统的开销,如果实例一个类开销非常大,单例模式也是非常实用的。
单例模式主要是由一下的几个分类:

  • 懒汉式单例
  • 饿汉式单例(这都是因为什么,单例这么萌,怎么都取这种名字)
  • 登记式单例(忽略 忽略)

    单例有以下几个特点:

  • 单例只能有一个实例。

  • 单例必须自己创建单一实例
  • 单例必须给其他所有对象提供这一单一实例

    下面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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值