模板模式

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

父类的方法通过定义一个空的方法,具体的逻辑让子类来实现,这样实现了父类控制子类。在很多场景中这样的方式很有效的,在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("进行上海银行的对公业务");
    }
}

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

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

 

posted @ 2020-05-13 18:38  beppezhang  阅读(190)  评论(0编辑  收藏  举报