场景:
- 实现一个功能时,整体步骤很固定,但是,某些部分易变。易变部分可以抽象出来,供子类实现。
开发中常见的场景
- 非常繁琐,各个框架,类库中都有它的影子,比如常见的有:
- 数据库访问的封装
- Junit单元测试
- servlet中关于doGet/doPost方法调用
- spring框架中各种Template
- shire中权限认证和授权都用到了模板方法模式。
举例代码实现
场景:银行办理业务:
- 1.取号;
- 2.办理业务/取钱/转账/企业/个人...
- 3.给工作人员评分
代码实现
-
- 模板类
java
public abstract class BankTempLateMethod {
//具体方法
public void takeNumber(){
System.out.println("排队取号。。。。。");
}
public abstract void transact(); //办理具体的业务 钩子方法
//具体方法
public void evaluate(){
System.out.println("反馈评分。。。。。");
}
//模板方法
public final void process(){
takeNumber();
transact();
evaluate();
}
}
-
- 子类
java
public class Sub1BankTemplateMethod extends BankTemplateMethod{
@Override
protected void transact() {
System.out.println("办理取款业务。。。。。");
}
}
public class Sub2BankTemplateMethod extends BankTemplateMethod{
@Override
protected void transact() {
System.out.println("办理存钱业务。。。。。");
}
}
-
- 客户调用
java
/**
* 模板方法模式
*/
public class App {
public static void main(String[] args) {
BankTemplateMethod bankTemplateMethod1 = new Sub1BankTemplateMethod();
bankTemplateMethod1.process();
System.out.println("--------------------------------------------------");
BankTemplateMethod bankTemplateMethod2 = new Sub2BankTemplateMethod();
bankTemplateMethod2.process();
}
}
更多设计模式学习:
设计模式持续更新中...