• 模板方法模式


    1、场景

    客户到银行办理业务:
    1、取号排队
    2、办理具体现金、转账、理财业务
    3、给银行工作人员评分
    请客吃饭
    1、点单
    2、吃东西(吃面条、吃满汉全席)
    3、买单

    2、介绍

    模板方法模式定义了一个操作中的算法骨架,将某些步骤延迟到子类中实现,新的子类在不改变一个算法骨架结构的前提下重新定义该算法的某些特定步骤。

    处理步骤已经定义好,具体的实现需要在子类中定义。

    3、什么时候用到模板方法模式

    实现一个算法时,整体步骤很固定,但是某些部分易变,易变部分可以抽象出来,供子类实现。

    4、代码示例

    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();
        }
    }
    
    package templateMethod;
    
    /**
     * @author tqq
     * @date 2021-04-02-15:27
     */
    public class Client {
        public static void main(String[] args) {
            BankTemplateMethod btm = new DrawMoney();
            btm.process();
    
            /**
             * 采用匿名内部类
             */
            BankTemplateMethod btm2 = new BankTemplateMethod() {
                @Override
                public void transact() {
                    System.out.println("我要存钱!!");
                }
            };
            btm2.process();
            BankTemplateMethod btm3 = new BankTemplateMethod() {
                @Override
                public void transact() {
                    System.out.println("我要理财,我有2000万韩币");
                }
            };
            btm3.process();
    
            BankTemplateMethod btm4 = new BankTemplateMethod() {
                @Override
                public void transact() {
                    System.out.println("我来定期存款!");
                }
            };
            btm4.process();
    
    
        }
    }
    class DrawMoney extends BankTemplateMethod{
    
        @Override
        public void transact() {
            System.out.println("我要取款!!!");
        }
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
  • 相关阅读:
    spring6使用启用Log4j2日志框架
    【LIMU-Bert论文阅读】
    C/C++导航系统
    Vue3源码【一】—— ref&reactive响应式原理及简单实现
    【C++】哈希基础1
    笔记本电脑怎样重新安装系统
    Linux下IIC驱动编写,介绍IIC子系统框架的使用
    Chart.xkcd图表库
    pytorch深度学习实战lesson17
    【机器学习】--- 深度学习中的注意力机制
  • 原文地址:https://blog.csdn.net/weixin_42072357/article/details/132671728