zoukankan      html  css  js  c++  java
  • 模板模式

    模板设计模式主要是用在代码重构中的减少重复代码的场景:将相同的代码抽象在父类中,具体实现则通过子类中具体的实现逻辑。

    父类的方法通过定义一个空的方法,具体的逻辑让子类来实现,这样实现了父类控制子类。在很多场景中这样的方式很有效的,在spring框架中就用了很多模板方式的实现。

    核心代码:

    1:抽象父类:将统一的行为抽象到父类方法中

    2:骨架方法,在抽象父类中维护一个骨架方法,这个方法包含这一系列操作的步骤

    下面以具体的例子来讲述模板方法:以银行办理业务的例子来进行说明:

    去银行办业务,如取钱,存钱或者办卡等,基本都需要三个大的步骤(骨架),首先 (1)取号 (2)办具体业务 (3)服务评价打分,然后这三个步骤就可以抽取到父类中进行定义。

    定义抽象父类:首先需要定义骨架方法,就是包含这三个步骤的方法,这里以 process() 方法来表示。

    public abstract class Bank {
    
        //骨架方法  包含一些操作的所有步骤
        void process(){
            takeNum();
            doBusiness();
            evaluate();
        }
        //每个银行固定步骤 取号
        void takeNum(){
            System.out.println("正在排队取号");
        }
    
        // 处理具体的逻辑
        void doBusiness(){}
    
        //每个银行固定步骤 评价
        void evaluate(){
            System.out.println("对柜台人员进行评价");
        }
    }

    定义好父类的骨架方法 和 各个步骤的方法后,接下来可以定义子类的具体步骤了。对于取号和评价这两个步骤都是固定的,就在父类中实现就可以。子类不需要自定义实现这些方法

    而在父类中做具体的业务操作是一个空方法,具体的实现是在子类中。

    具体子类代码如下:

    public class BeijingBank extends Bank{
    
        public void process(){
            super.process();
        }
    
        @Override
        protected void doBusiness(){
            System.out.println("进行北京银行的转账业务");
            System.out.println("进行北京银行的取款业务");
        }
    }
    public class ShanghaiBank extends Bank{
    
        public void process(){
            super.process();
        }
    
        @Override
        protected void doBusiness(){
            System.out.println("进行上海银行的存款业务");
            System.out.println("进行上海银行的对公业务");
        }
    }

    对于这种模板模式的灵活使用可以减少很多通用的冗余代码,一样的代码都封装在父类中,个性化的代码在子类中自定义实现,满足具体的业务需求,在具体的项目编程过程中

    是很常见的一种设计模式。

  • 相关阅读:
    设计模式Day02
    OA,ERP等源码一部分演示
    第三方登录
    其实没那么复杂!探究react-native通信机制
    学习面试题(day01)
    学习面试题Day02
    学习面试题Day03
    python 字典排序
    Mac系统下adb工具的配置
    Mac adb 安装
  • 原文地址:https://www.cnblogs.com/beppezhang/p/12884160.html
Copyright © 2011-2022 走看看