Java/Android 23种设计模式之单例模式

10 篇文章 0 订阅
5 篇文章 0 订阅

在Android生态中,各种各样的设计模式总是可以见得到,比如时钟等

为什么要有单例模式呢?

在Java中,大多数的对象都是通过new 来申请空间,涉及到堆栈,如果频繁的去创建对象,会造成不小的内存开销,再一点就是没一个对象都是单独的,值是不同的,如果在一些业务场景不使用单例,会造成一些意料之外的结果,比如时钟,时间上的管理,比如Retrofit框架一般的封装也会使用单例,Retrofit.getInstance()....

单例模式的好处?

第一点就是保证了唯一性,也就是全局只有这么一个对象(地址),所有的操作是get到该单例的实例以后去调用方法,进行操作

单例模式的写法

 

1.饿汉式(不推荐)

public class SingleTest {
    private static final SingleTest mInstance = new SingleTest();
    private SingleTest(){}
    public SingleTest getmInstance(){
        return mInstance;
    }
}

 

2.懒汉式

public class SingleTest {
    private static  SingleTest mInstance = null;
    private SingleTest(){}
    public SingleTest getmInstance(){
        if (mInstance == null){
            mInstance = new SingleTest();
        }
        return mInstance;
    }
}

多线程是不安全的,所以需要扩展下
public class SingleTest {
    private static volatile SingleTest mInstance = null;
    private SingleTest(){}
    public SingleTest getmInstance(){
        if (mInstance == null){
            synchronized (SingleTest.class){
                if (mInstance == null){
                    mInstance = new SingleTest();
                }
            }
        }
        return mInstance;
    }
}

 

其他写法 比如静态内部类/枚举等也可以做到

单例模式的缺点:

系统中只有一个实例,这样就导致了单例类的职责过重,违背单一职责原则,同时也没有抽象类,这样扩展起来有一定的困难。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值