前言
模板方法模式是最为常见的几个模式之一(也比较简单),是基于继承实现代码复用的基本技术。
模板方法模式(TemplateMethod Pattern)的定义是:首先定义了一个由若干执行步骤组成的执行过程(形成模板),而将一些步骤延迟在子类中实现,使得子类能够对其中一个或者多个具体步骤进行重新定义,从而改变最终的执行结果。
什么是模板方法模式
模板方法模式的UML类图如下:
这里涉及到了两个角色:
- 抽象模板 AbstractTemplate
定义并实现了一个模板方法。这个模板方法一般是一个具体的方法,它定义了一个顶级逻辑的框架,而逻辑的组成步骤由抽象方法和其他具体方法组成,抽象方法在子类中实现。
定义了一个或者多个抽象方法,这个/些抽象方法是模板方法的一部分,组成模板方法内一个或者多个步骤。
- 具体模板 ConcreteTemplate
实现抽象父类定义的一个或者多个抽象方法,它们是模板方法的组成步骤。
每一个抽象模板都可以有任意多个具体模板的实现,每一个具体模板都可以给出这些抽象方法的不同实现,从而改变模板方法最后的执行结果。
模板方法模式中的方法
模板方法模式中的方法可以分为两大类:模板方法和基本方法
模板方法
模板方法是定义在抽象类中的,把基本操作组合在一起形成一个总的执行过程。 一个抽象类可以有任意多个模板方法,而不限于一个,每一个模板方法都可以调用任意多个具体方法。
基本方法
基本方法又可以进一步划分成:抽象方法(Abstract Method)、具体方法(Concrete Method)和钩子方法(Hook Method)
抽象方法:抽象方法由抽象类声明并最终由具体子类实现,从而改变模板方法的最终执行结果
具体方法:具体方法由抽象类声明并实现,子类不一定需要实现(除非是需要重写改方法)
钩子方法:钩子方法由抽象类声明并实现,而子类会对其进行拓展,通常抽象类给出的实现是一个空实现,作为方法的默认实现。
使用场景:对短信的文本内容进行敏感词过滤
之前做过的一个业务场景是:对短信的文本内容进行敏感词过滤,需要将文本内容与敏感词词库做匹配,通过加载敏感词文件即可获取全部的违禁词,敏感词文件可以放在服务器内的某一个具体路径,也可以是放在项目内的Resource目录下,在这两个位置下加载方式是有区别的,但是除此之外违禁词的读取、存放都是相同的。
定义了一个接口SensitiveWordLoader、一个抽象类SensitiveWordAbstractFileLoader,以及两个