标签: 设计模式算法
引言数据库
在模板方法模式中,将实现功能的每个步骤所对应的方法称为基本方法(例如“点单”、“吃东西”和“买单”),而调用这些基本方法同时定义基本方法的执行次序的方法称为模板方法(例如“请客”)。模板方法定义算法执行的骨架,子类继承下来直接使用,通常用final修饰不容许子类修改。设计模式
抽象类的任务是搭建逻辑的框架,一般由经验丰富的人员编写,抽象类的好坏直接决定了程序是否稳定。框架
实现类用来实现细节。抽象类中的模板方法正是经过实现类扩展的方法来完成业务逻辑。只要实现类中的扩展方法经过了单元测试,在模板方法正确的前提下,总体功能通常不会出现大的错误。数据库设计
类型单元测试
行为型模式。测试
目的设计
算法的步骤先由抽象类里面提供一个方法写好,具体的细节延迟到子类实现。模板方法使得同一个算法的多个不一样实现有一致的框架,而具体区别由子类控制。3d
UML类结构对象
角色
模板方法模式由一个抽象类和一个(或一组)实现类经过继承结构组成,抽象类中的方法分为三种:
(1)抽象方法:父类中只声明但不加以实现,而是定义好规范,而后由它的子类去实现。
(2)模板方法:由抽象类声明并加以实现。通常来讲,模板方法调用抽象方法来完成主要的逻辑功能,而且,模板方法大多会定义为final类型,指明主要的逻辑功能在子类中不能被重写。
(3)钩子方法:由抽象类声明并加以实现。可是子类能够去扩展,子类能够经过扩展钩子方法来影响模板方法的逻辑。例如使用返回布尔变量的方法来控制算法中某些步骤是否执行。
说明
模板模式是一种基于继承的代码复用技术。因为模板方法是具体方法,所以模板方法模式中的抽象层只能是抽象类,而不是接口。
优点
(1)具体细节步骤实现定义在子类中,子类定义详细处理算法是不会改变算法总体结构。
(2)代码复用的基本技术,在数据库设计中尤其重要。
(3)存在一种反向的控制结构,经过一个父类调用其子类的操做,经过子类对父类进行扩展增长新的行为,符合“开闭原则”。
不足
每一个不一样的实现都须要定义一个子类,会致使类的个数增长,系统更加庞大。
具体使用说明
(1)先写一个抽象类,定义几个基本方法,使用abstract修饰,而后定义一个模板方法,模板方法是具体方法,按照必定顺序访问自身的基本方法。
(2)写一个或者多个继承该抽象类的子类,实现全部基本方法便可。
(3)Client端直接调用抽象类类型的对象的模板方法,便可调用这个算法。修改算法具体实现时,只需修改子类或者新增一个子类便可,不用修改Client端的代码。