我们做一些事情都有一个步骤,而相似事的步骤是一致的。就拿我们打10086来说,有人查余额和有人要人工服务,但他们的不知都分下面三步:拨号、选择服务、评分。这种最适合用模板方法,实现如下:
public class TemplateMethod {
//模板抽象方法
public abstract static class Template10086 {
//1.拨打10086
public void takeNumber(){
System.out.println("拨打10086");
}
//2.办理具体的业务:这里留给子类来实现!!!
public abstract void transact();
//3.给客服评分
public void evaluate(){
System.out.println("反馈评分");
}
//模板方法,一定的流程
public final void process(){
this.takeNumber();
this.transact();//这里则是具体的模板方法函数
this.evaluate();
}
}
public static void main(String[] args) {
Template10086 查余额 = new Template10086(){//匿名内部子类
@Override
public void transact() {
System.out.println("先按1再按2");
}
};
System.out.println("查余额:");
查余额.process();
Template10086 人工服务 = new Template10086(){
@Override
public void transact() {
System.out.println("先按1再按0");
}
};
System.out.println("\n人工服务:");
人工服务.process();
}
}
输出:
查余额:
拨打10086
先按1再按2
反馈评分
人工服务:
拨打10086
先按1再按0
反馈评分
模板方法模式适用于:有各个方法组成的固定流程,子方法实现可能不同(可以是多个)。
觉得容易理解的话面向对象的23种设计模式点这里