在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;
    }
}

 

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

单例模式的缺点:

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