源代码:https://gitee.com/AgentXiao/BehavioralPatterns
要点:
1、使用场景
2、核心及实现
一、场景
我们到银行办理业务时,有一个固定的流程:
1、取号排队
2、办理业务
3、反馈评分
在办理业务中,我们是可以进行细分的,具体是办理取钱、存钱、理财还是其他的业务呢?
遇到这样的问题时,我们可以采用模板方法模式进行解决。
二、模板方法模式
模板方法模式定义了一个操作中的算法骨架,将其中的某些步骤延迟到子类中具体实现!这样,新的子类可以在不改变一个算法结构的前提下重新定义算法中的某些步骤。
处理步骤在子类中实现,具体实现延迟到子类中定义。
1、模板(算法骨架)
/**
* @ClassName BankBusiness
* @Description 银行业务
* @Author xwd
* @Date 2018/10/28 16:02
*/
public abstract class BankBusiness {
/**
* @MethodName makeInLine
* @Descrition 取号排队
* @Param []
* @return void
*/
public void makeInLine(){
System.out.println("取号排队!");
}
/**
* @MethodName transact
* @Descrition 具体的业务类,在之类中实现
* @Param []
* @return void
*/
public abstract void transact();
/**
* @MethodName evaluate
* @Descrition 反馈评分
* @Param []
* @return void
*/
public void evaluate(){
System.out.println("反馈评分!");
}
/**
* @MethodName process
* @Descrition 业务逻辑模板(核心代码)
* @Param []
* @return void
*/
public final void process(){
this.makeInLine();
this.transact();
this.evaluate();
}
}
2、调用(一般使用匿名内部类进行实现)
/**
* @ClassName Client
* @Description 客户
* @Author xwd
* @Date 2018/10/28 16:06
*/
public class Client {
public static void main(String[] args) {
//一般通过匿名内部类类实现
BankBusiness bb1 = new BankBusiness() {
@Override
public void transact() {
System.out.println("存钱!");
}
};
bb1.process();
BankBusiness bb2 = new BankBusiness() {
@Override
public void transact() {
System.out.println("取钱!");
}
};
bb2.process();
}
}
3、测试结果
三、总结
1、何时使用
实现一个算法,整体步骤很固定,但是某些部分异变。易变部分可以抽象出来,供子类实现。
2、开发中的场景
servlet中关于doGet和doPost方法调用