其他分享
首页 > 其他分享> > GOF23之模板方法模式

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();
        }
}

优点:

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

感谢阅读,水平有限,如有错漏,还请不吝赐教

Tips。 发布了18 篇原创文章 · 获赞 13 · 访问量 2567 私信 关注

标签:GOF23,子类,void,模式,BankTemplateMethod,抽象类,方法,public,模板
来源: https://blog.csdn.net/weixin_44789225/article/details/104538705