设计模式之模板方法模式, final方法的关键所在

4个字概括就是"流程封装".

定义, 以及为什么要使用final 方法.

开发中经常能碰到有些操作的执行步骤是固定的, 但每一个步骤的实现可以是多样化的, 例如ImageLoader提供的loadImage(url, listener), 步骤是从网上获取图片, 缓存图片, 把图片设置给listener.
这种情况下, 就可以把ImageLoader抽取出一个抽象类AbsImageLoader, 把loadImage()定义为final, 这样子类就不可以去修改loadImage(), 只能去修改每个步骤的实现细节. 通过这种方式, 执行的流程就被固定下来了.

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 execute(Params... params) 

在execute()方法内部封装了onPreExecute, doInBackground, onPostExecute这个逻辑流程,客户可以根据自己的需求再覆写这几个方法, 但因为execute是final方法,这样就可以保证AsyncTask中的执行流程是固定不变的.

阅读代码时, 经常看到有些抽象类中的方法声明为final, 有很多就是出于"封装固定流程"的目的才用到了final关键字.

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

你可能感兴趣的:(设计模式之模板方法模式, final方法的关键所在)