美文网首页android源码中不同设计模式的使用总结
设计模式之模板方法模式, final方法的关键所在

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

作者: ahking17 | 来源:发表于2017-03-13 12:04 被阅读47次

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

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

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

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

    相关文章

      网友评论

        本文标题:设计模式之模板方法模式, final方法的关键所在

        本文链接:https://www.haomeiwen.com/subject/mkpfnttx.html