在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;
}
}
其他寫法 比如靜態內部類/枚舉等也可以做到
單例模式的缺點:
系統中只有一個實例,這樣就導致了單例類的職責過重,違背單一職責原則,同時也沒有抽象類,這樣擴展起來有一定的困難。