在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;
}
}
其他写法 比如静态内部类/枚举等也可以做到
单例模式的缺点:
系统中只有一个实例,这样就导致了单例类的职责过重,违背单一职责原则,同时也没有抽象类,这样扩展起来有一定的困难。