模板方法设计模式
一:模板方法代码如下所示:
1、定义模板类
public abstract class TemplateMethod { /**模板方法:总体算法的骨架,总体不能修改 * @return */ final public Long typeOperate(){ //当前系统的时间(毫秒) Long currentTime = System.currentTimeMillis(); // 具体操作留给子类完成 this.doWork(); Long endTime = System.currentTimeMillis(); return endTime - currentTime; } protected abstract void doWork(); }
子类实现类 IntOperate
public class IntOperate extends TemplateMethod{ @Override public void doWork(){ int num = 0; for (int i=0 ; i<10000000;i++ ){ num += i; } System.out.println(num); } }
子类实现类2 IntOperate
public class IntOperate extends TemplateMethod{ @Override public void doWork(){ int num = 0; for (int i=0 ; i<10000000;i++ ){ num += i; } System.out.println(num); } }
测试类
public class TemplateMethodDemo { public static void main(String[] args) { //统计String的10000次操作和int操作相加10000000次的时间差 TemplateMethod templateMethod = new StringOperate(); System.out.println( templateMethod.typeOperate()); System.out.println(new IntOperate().typeOperate()); } }
二:模板方法设计模式总结
在父类的一个方法中定义一个总体算法的骨架(模板方法),而将某一些一些步骤延迟到子类中,因为不同的子类实现细节不同。模板方法使得子类可以在不改变算法结构的情况下, 重新定义算法中的某些步骤。抽象父类负责定义操作中的业务骨架,而把某些具体的实现步骤延迟到子类中去实现。
使用场景
1、子类具有相同的方法,并且逻辑基本相同
2、代码重构时,模板方法会经常使用到,然后通过钩子函数(见模板方法扩展)约束其行为。
抽象父类至少提供的方法:
模板方法:一种通用的处理方式,即模板(总体算法的骨架);
抽象方法:一种具体的业务功能实现,由子类完成;
注意:
抽象父类提供的模版方法只是定义了一个通用算法,其实现必须依赖子类的辅助。
模版方法作为模版样式不准子类覆写:
答:用final修饰,不让子类覆盖
抽象方法的权限又如何设置:
答:使用protected修饰
郭慕荣博客园