一,模式简介
1.由考试答题的例子想到,如果我们每一个考生都定义一个特定的接口,那么这样就会造成大量的代码冗余
我们可以这样来考虑
准备一个抽象类,将部分逻辑以具体方法以及具体子类的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。
不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法的用意
具体代码:
首先是试卷类,定义成抽象类,然后以抽象方法的模式,使继承他的类能够实现必须实现的方法
抽象方法就是他的子类必须实现的方法
子类1
子类2
客户端的调用:
2.模板方法模式是基于继承的代码复用的基本技术,模板方法模式的结构和用法也是面向对象设计的核心
二,模式的定义和用法
(1)模式定义:
定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤
(2)应用场景
当我们要完成在某一个细节层次一致的一个过程或一系列步骤,但其个别步骤在更详细的层次上的实现可能不同的时候,我们通常要考虑模板方法模式解决
(3)uml图
抽象模板角色(AbstractClass):有以下责任:
-
定义了一个或多个抽象操作,以便让子类实现。这些抽象操作叫做基本操作,他们是一个顶级逻辑组成步骤
-
定义并实现了一个模板方法。这个模板方法一般是一个具体方法,它给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。顶级逻辑可能调用一些具体方法
具体模板角色:
-
实现父类定义的一个或多个抽象方法,他们是一个顶级逻辑的组成步骤
-
每一个抽象模板角色都可以有任意多个具体模板角色与之对应,而每一个具体模板都可以给出这些抽象方法(也就是顶级逻辑的组成步骤)的不同实现,从而使顶级逻辑的实现各不相同
(4)这个模式还可以应用到数据库的连接操作上
我们可以在顶级逻辑类中,定义好实现的抽象方法的步骤
然后在子类中一一实现即可
例如顶级逻辑中的定义方式:
然后根据不同数据库的不同操作进行不同的更改即可
三,优点与缺点
优点:实现代码复用
缺点:算法骨架不易升级