模板方法模式违禁词文件加载

白癜风可以医吗 https://m-mip.39.net/man/mipso_7157873.html

简介

模板方法模式是最为常见的几个模式之一(也比较简单),是基于继承实现代码复用的基本技术。模板方法模式(TemplateMethodPattern)的定义是:首先定义了一个由若干执行步骤组成的执行过程(形成模板),而将一些步骤延迟在子类中实现,使得子类能够对其中一个或者多个具体步骤进行重新定义,从而改变最终的执行结果。模板方法模式的UML类图如下:

模板方法模式类图.png

这里涉及到了两个角色:

抽象模板AbstractTemplate

定义并实现了一个模板方法。这个模板方法一般是一个具体的方法,它定义了一个顶级逻辑的框架,而逻辑的组成步骤由抽象方法和其他具体方法组成,抽象方法在子类中实现。

定义了一个或者多个抽象方法,这个/些抽象方法是模板方法的一部分,组成模板方法内一个或者多个步骤。

具体模板ConcreteTemplate

实现抽象父类定义的一个或者多个抽象方法,它们是模板方法的组成步骤。

每一个抽象模板都可以有任意多个具体模板的实现,每一个具体模板都可以给出这些抽象方法的不同实现,从而改变模板方法最后的执行结果。

模板方法模式中的方法

模板方法模式中的方法可以分为两大类:模板方法和基本方法

模板方法

模板方法是定义在抽象类中的,把基本操作组合在一起形成一个总的执行过程。一个抽象类可以有任意多个模板方法,而不限于一个,每一个模板方法都可以调用任意多个具体方法。

基本方法

基本方法又可以进一步划分成:抽象方法(AbstractMethod)、具体方法(ConcreteMethod)和钩子方法(HookMethod)

抽象方法:抽象方法由抽象类声明并最终由具体子类实现,从而改变模板方法的最终执行结果

具体方法:具体方法由抽象类声明并实现,子类不一定需要实现(除非是需要重写改方法)

钩子方法:钩子方法由抽象类声明并实现,而子类会对其进行拓展,通常抽象类给出的实现是一个空实现,作为方法的默认实现。

使用场景

我之前做过的一个业务场景是:对短信的文本内容进行敏感词过滤,需要将文本内容与敏感词词库做匹配,通过加载敏感词文件即可获取全部的违禁词,敏感词文件可以放在服务器内的某一个具体路径,也可以是放在项目内的Resource目录下,在这两个位置下加载方式是有区别的,但是除此之外违禁词的读取、存放都是相同的。定义了一个接口SensitiveWordLoader、一个抽象类SensitiveWordAbstractFileLoader以及两个具体实现SensitiveWordExternalFileLoader和SensitiveWordJarFileLoader,UML类图如下:

模板方法模式实现违禁词加载.png

由于敏感词词库也可以存放在各类数据库中,从文件中加载只是其中的一种方法,因此提供了一个接口供抽象类实现,中的load方法即是模板方法,其中定义了敏感词文件流的获取以及从文件流中读取敏感词并存放,其中的extractSensitiveWordFromSingleLine是具体方法,用于定义从敏感词文件中逐行提取敏感词的逻辑,initInputStream是抽象类中定义的输入流初始化方法,在不同加载方式下获取输入流的方式均不相同因此需要交由子类进行实现;模板方法内的主要执行逻辑由具体方法和抽象方法完成。各类代码如下:SensitiveWordLoader

package


转载请注明:http://www.jiaju1314.com/zytd/zytd/17336.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了