設(shè)計模式之模板方法模式, final方法的關(guān)鍵所在

4個字概括就是"流程封裝".

定義, 以及為什么要使用final 方法.

開發(fā)中經(jīng)常能碰到有些操作的執(zhí)行步驟是固定的, 但每一個步驟的實現(xiàn)可以是多樣化的, 例如ImageLoader提供的loadImage(url, listener), 步驟是從網(wǎng)上獲取圖片, 緩存圖片, 把圖片設(shè)置給listener.
這種情況下, 就可以把ImageLoader抽取出一個抽象類AbsImageLoader, 把loadImage()定義為final, 這樣子類就不可以去修改loadImage(), 只能去修改每個步驟的實現(xiàn)細(xì)節(jié). 通過這種方式, 執(zhí)行的流程就被固定下來了.

public class AbsImageLoader {
    public final void loadImage(String url, Listener listener) {
        onRequest(url);
        saveToCache(Bitmap bitmap);
        listener.onReceiveBitmap(bitmap);
    }

    public abstract void onRequest(String url);
    public abstract void saveToCache(Bitmap bitmap);

}
源碼中的使用

最典型的是AsyncTask提供的execute()就被聲明為final類型.

public final AsyncTask<Params, Progress, Result> execute(Params... params) 

在execute()方法內(nèi)部封裝了onPreExecute, doInBackground, onPostExecute這個邏輯流程,客戶可以根據(jù)自己的需求再覆寫這幾個方法, 但因為execute是final方法,這樣就可以保證AsyncTask中的執(zhí)行流程是固定不變的.

閱讀代碼時, 經(jīng)常看到有些抽象類中的方法聲明為final, 有很多就是出于"封裝固定流程"的目的才用到了final關(guān)鍵字.

--------DONE.--------------------

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容