GOF23之模板方法模式
作者:互联网
一、核心作用:
处理某个流程代码都已经具备,但是某个节点的代码暂时不能确定,因此我们采用模板方法模式,将这个节点的代码暂时转移给子类完成
处理步骤父类中定义好,具体实现延迟到子类定义
父类增加一个钩子方法,提供默认实现 子类重写钩子方法,达到动态改变父类执行方法的顺序
二、常见应用场景:
- 数据库访问的封装
- junit单元测试
- Servlet种doGet/doPost
三、模板方法模式的实现:
- 抽象类(Abstract Class):负责给出程序的轮廓和骨架,它由一个模板方法和若干基本方法组成
模板方法:定义了程序的骨架,按照某种顺序执行其基本方法 基本方法:
• 抽象方法:再抽象类中声明,由具体子类实现
•具体方法:再抽象类中已经实现,再具体子类中可以继承或者重写
• 钩子方法:在抽象类中已经实现,用于判断的逻辑方法和需要子类重写的空方法两种
- 具体子类:实现抽象类中所定义的抽象方法和钩子方法
四、代码示例:
一、抽象类代码:
package com.hezeu.templateMethod;
/**
* @Classname BankTemplateMethod
* @Description TODO
* @Date 2020/2/26 下午 11:29
* @Created by 朱进博 1724282894@qq.com
*/
public abstract class BankTemplateMethod {
public void takeNumber(){
System.out.println("排队取号");
}
public abstract void transact();
public void evaluate(){
System.out.println("反馈评分");
}
public final void process(){
this.takeNumber();
this.transact();
this.evaluate();
}
}
二、具体实现类:
class DramMoney extends BankTemplateMethod{
@Override
public void transact() {
System.out.println("我要取款");
}
}
三、测试:
package com.hezeu.templateMethod;
/**
* @Classname Client
* @Description TODO
* @Date 2020/2/26 下午 11:40
* @Created by 朱进博 1724282894@qq.com
*/
public class Client {
public static void main(String[] args) {
BankTemplateMethod btm = new DramMoney();
btm.process();
BankTemplateMethod btm2 = new BankTemplateMethod() {
@Override
public void transact() {
System.out.println("我要存钱");
}
};
btm2.process();
}
}
优点:
开发人员再开发时,只考虑方法的实现,不用考虑方法再何种情况下被调用。实现代码的复用
感谢阅读,水平有限,如有错漏,还请不吝赐教
Tips。 发布了18 篇原创文章 · 获赞 13 · 访问量 2567 私信 关注标签:GOF23,子类,void,模式,BankTemplateMethod,抽象类,方法,public,模板 来源: https://blog.csdn.net/weixin_44789225/article/details/104538705