Java/Android 23種設計模式之單例模式

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

 

其他寫法 比如靜態內部類/枚舉等也可以做到

單例模式的缺點:

系統中只有一個實例,這樣就導致了單例類的職責過重,違背單一職責原則,同時也沒有抽象類,這樣擴展起來有一定的困難。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章