模板(template method)方法模式
一、概述
生活中每个人都离不开吃,然而每个人吃的东西都不尽相同;有的人可能每天只能吃包子馒头,而有的人却可以每日山珍海味。尽管吃的东西不一样,但有些步骤却是相同:点单→吃东西→买单。
在软件开发中,同样存在许多类似的情况。例如:查询数据时,都需要按照如下步骤执行:初始化session→使用session查询数据→处理数据→返回数据;这些步骤执行顺序都是一致的,然而处理数据的方式可能不尽相同。如果每个类都copy一份相同的代码,这不仅会造成代码的大量冗余,而且随着代码量的逐渐增加,需求的频繁变更,那么整个程序将慢慢腐坏,系统将变得难以维护。
对于一些实现步骤基本固定,但有少量步骤实现方式不确定(一种需求对应一种实现方式)的情况,可以通过OOP的继承,将固定步骤在父类中实现,将一些不确定的步骤推迟到子类去实现,在子类中根据需求编写不同实现方式。这种解决方案被称之为模板方法模式。
模板方法模式定义:定义在一个操作中的一个算法框架(一系列操作步骤),把一些步骤推迟到子类中去实现,使子类不改变算法结构(不需关心算法结构),而是重新定义特有的算法步骤。
一般情况下我们通过继承关系编写子类实现特有的方法步骤,然而当有大量不同需求时,这可能需要创建大量的子类,对于这种情况,可以通过回调的方式大大减少子类的数量。例如在spring中就大量运用了模板方法模式回调的方案,比如TemplateHibernate的execute(HibernateCallBack action),如下使用模板方法模式创建自己的TemplateHibernate: