模板模式
模板设计模式主要是用在代码重构中的减少重复代码的场景:将相同的代码抽象在父类中,具体实现则通过子类中具体的实现逻辑。
父类的方法通过定义一个空的方法,具体的逻辑让子类来实现,这样实现了父类控制子类。在很多场景中这样的方式很有效的,在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("进行上海银行的对公业务"); } }
对于这种模板模式的灵活使用可以减少很多通用的冗余代码,一样的代码都封装在父类中,个性化的代码在子类中自定义实现,满足具体的业务需求,在具体的项目编程过程中
是很常见的一种设计模式。