场景
- 客户到银行办理业务:
- 取号排队
- 办理具体现金/转账/企业/个人/理财业务
- 给银行工作人员评分
核心:
处理某个流程的代码已经都具备,但是其中某个节点的代码暂时不能确定。因此,我们采用工厂方法模式,,将这个节点的代码实现转移给子类完成。
即:处理步骤父类中定义好,具体实现延迟到子类中定义。
概述
模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。
比如定义一个操作中的算法的骨架,将步骤延迟到子类中。模板方法使得子类能够不去改变一个算法的结构即可重定义算法的某些特定步骤。
模式中的角色
抽象类(AbstractClass):实现了模板方法,定义了算法的骨架。
具体类(ConcreteClass):实现抽象类中的抽象方法,已完成完整的算法。
public abstract class Bank { 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(); } } public class Client { public static void main(String[] args) { // TODO Auto-generated method stub Bank bank = new Bank(){ @Override public void transact() { // TODO Auto-generated method stub System.out.println("我要取钱"); } }; bank.process(); } }
什么时候用到模板方法模式:
实现一个算法时,整体步骤很固定。但是,某些部分易变,易变部分可以抽象出来,供子类实现。
开发中常见的场景:
非常频繁。各个框架、类库中都有它的影子。比如常见的有:
- 数据库访问的封装
- junit单元测试
- servlet中关于doGet/doPost方法调用
- hibernate中模板程序
- spring中JDBCTemplate、HibernateTemplate等
时间: 2024-10-10 16:46:56