写点什么

模板方法模式,flutter 刷新机制

用户头像
Android架构
关注
发布于: 19 小时前

模板的含义就是一个方法, 这个方法将算法定义成一组步骤,其中的任何步骤都可以是抽象的,由子类负责实现。这可以确保算法的结构保持不变,由子类提供部分实现。


设计类图:



示例代码:


public abstract class AbstractTemplate {


/**


  • 模板方法, 定义一个算法骨架,包含一系列算法步骤


*/


public void templateMethod(){


//算法步骤由一些基本方法组成, 其中某些方法可以在子类中实现


primitiveOperation1()


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


;


primitiveOperation2();


concreteOperation();


}


protected abstract void primitiveOperation1();


protected abstract void primitiveOperation2();


private void concreteOperation() {


//这里是公共不变的部分


}


}


public class ConcreteTemplate extends AbstractTemplate {


@Override


protected void primitiveOperation1() {


//子类实现算法中的具体步骤


}


@Override


protected void primitiveOperation2() {


//子类实现算法中的具体步骤


}


}


public class Client {


public static void main(String[] args) {


AbstractTemplate template = new ConcreteTemplate();


template.templateMethod();


}


}


模板方法的实现非常简单,看上去就是简单的继承。但是模板方法必须是由父类定义一系列步骤,由子类去实现特定步骤。一系列步骤的方法被称为基本方法或者原语操作,需要由子类实现的方法都是 protected 的,这符合迪米特法则,外部知道的越少越好。模板方法可以说在实际当中是经常被用到的,不过多数情况下我们并没有感觉到。


模板方法中的钩子方法


模板方法的一个重要应用就是钩子方法(Hook Method)的应用,钩子方法给你提供了更加灵活的方式,使得你可以选择需要或者不需要执行算法步骤当中的某些步骤。


示例代码:


public abstract class AbstractTemplate {


/**


  • 模板方法, 定义一个算法骨架,包含一系列算法步骤


*/


public void templateMethod(){


//算法步骤由一些基本方法组成, 某些方法可以在子类中实现


primitiveOperation1();


primitiveOperation2();


//根据钩子方法的返回结果决定是否执行下面的步骤


if (hookMethod()) {


concreteOperation();


}


}


protected abstract void primitiveOperation1();


protected abstract void primitiveOperation2();


private void concreteOperation() {


//这里是公共不变的部分


}


/**


  • 钩子方法, 这里提供默认实现


*/


protected boolean hookMethod() {


return true;


}


}

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
模板方法模式,flutter刷新机制