GOF23之模板方法模式

一、核心作用:

处理某个流程代码都已经具备,但是某个节点的代码暂时不能确定,因此我们采用模板方法模式,将这个节点的代码暂时转移给子类完成
处理步骤父类中定义好,具体实现延迟到子类定义
父类增加一个钩子方法,提供默认实现 子类重写钩子方法,达到动态改变父类执行方法的顺序

二、常见应用场景:

  1. 数据库访问的封装
  2. junit单元测试
  3. Servlet种doGet/doPost

三、模板方法模式的实现:

  1. 抽象类(Abstract Class):负责给出程序的轮廓和骨架,它由一个模板方法和若干基本方法组成

模板方法:定义了程序的骨架,按照某种顺序执行其基本方法 基本方法:
• 抽象方法:再抽象类中声明,由具体子类实现
•具体方法:再抽象类中已经实现,再具体子类中可以继承或者重写
• 钩子方法:在抽象类中已经实现,用于判断的逻辑方法和需要子类重写的空方法两种

  1. 具体子类:实现抽象类中所定义的抽象方法和钩子方法

在这里插入图片描述

四、代码示例:

一、抽象类代码:
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();
        }
}

优点:

开发人员再开发时,只考虑方法的实现,不用考虑方法再何种情况下被调用。实现代码的复用

感谢阅读,水平有限,如有错漏,还请不吝赐教
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值