一、背景
如果现在有这么个场景,现有一个财务系统,A,B,C三对象都需要对账单进行查询,然后各自进行不同的操作。怎么整?在A,B,C中分别查到账单然后在进行各自的处理?那么查询的动作是不是重复了?所以模板方法模式出现了。
二、概念
模板方法模式:定义一个操作中的算法框架,将一些步骤延迟到子类中,使得子类不可改变算法的结构即可重新定义算法的步骤。直白一点就是在抽象类中定义一个公用的模板方法,供各子类复用。为避免子类修改模板方法的实现细节,一般在模板方法之前加上final。
三、代码实例
/**
* ICaculator 抽象类
*
*/
abstract class ICaculator {
/**
* 公用的模板方法
*/
public final void publicCaculate() {
System.out.print("公用的模板方法");
}
/**
* 可被子类重写的方法
*/
public abstract void caculate();
}
/**
* 子类CaculatorA
*/
class CaculatorA extends ICaculator {
@Override
public void caculate() {
// TODO Auto-generated method stub
publicCaculate();
System.out.println("-->CaculatorA的计算方法");
}
}
/**
* 子类CaculatorB
*/
class CaculatorB extends ICaculator {
@Override
public void caculate() {
// TODO Auto-generated method stub
publicCaculate();
System.out.println("-->CaculatorB的计算方法");
}
}
public class TemplateMethodPatternDemo {
public static void main(String agrs[]) {
ICaculator caculatorA = new CaculatorA();
caculatorA.caculate();
ICaculator caculatorB = new CaculatorB();
caculatorB.caculate();
}
}