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.--------------------