首页后端开发JAVA漫谈模式之模版方法模式(模版方法和策略模式)

漫谈模式之模版方法模式(模版方法和策略模式)

时间2023-03-27 14:22:25发布访客分类JAVA浏览1462
导读:今天,我们来分享行为型模式的另外一个成员:模板方法模式。模板方法模式是一种行为型模式,它定义了一个算法的骨架,将算法的某些步骤延迟到子类中实现。该模式在超类中定义算法的结构,而在子类中实现算法的具体步骤,从而使得子类可以改变算法的具体实现,...

今天,我们来分享行为型模式的另外一个成员:模板方法模式

模板方法模式是一种行为型模式,它定义了一个算法的骨架,将算法的某些步骤延迟到子类中实现。该模式在超类中定义算法的结构,而在子类中实现算法的具体步骤,从而使得子类可以改变算法的具体实现,但不改变算法的整体结构。

在开始本文之前,我们先来看下生活中的一些场景,比如造房子。有一个基本的骨架,每栋房子又可以有自己的特点,比如加个旗子,加一个塔楼等。

这样定义一个操作的骨架,然后将一些步骤延迟到子类中去实现的场景就是我们今天要讲的模板方法模式要做的事情。

模板方法的基本介绍

意图

定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod使得子类可以不改变算法的结构即可重定义该算法的某些特定步骤。

结构

模板方法的基本结构如下:

这里涉及到两个角色:

抽象类(AbstarctClass)

  • 定义一个或者多个抽象操作,以便让子类实现。这些抽象操作叫做基本操作,它们是一个顶级逻辑的组成步骤
  • 定义并实现一个模板方法。这个模板方法一般是一个具体方法,它给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。顶级逻辑也有可能有一些具体方法。

具体类(ConcreteClass)

  • 实现父类定义的一个或者多个抽象方法,它们是一个顶级逻辑的组成步骤。
  • 每个抽象模板角色都可以有任意多个具体模板角色与之对应,而每一个具体模板角色都可以给出这些抽象方法(也就是顶级逻辑的组成步骤)的不同实现,从而使得顶级的实现各不相同。

模板方法中的方法可以分为两大类:

模板方法(template method)和基本方法(Primitive method)

模板方法

  • 一个模板方法是定义在抽象类中的,把基本操作方法组合在一起形成一个总算法或一个总行为的方法。这个模板方法一般会在抽象类中定义,并由子类不加以修改地完全继承下来,所以在java中使用final来进行修饰。
  • 一个抽象类可以有任意多个模板方法,而不限于一个。每个模板方法都可以调用任意多个具体方法。

基本方法

抽象方法:一个抽象方法由抽象类声明,由具体子类实现,方法使用abstract关键字修饰

具体方法:一个具体方法由抽象类声明并实现,而子类并不实现。一个具体方法没有abstract关键字

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

 模板方法的示例

示例描述

模拟读取不同文件格式,然后输出读取内容的场景。每个处理包括验证文件、解析文件数据、展示数据内容的通用步骤。

定义一个抽象类AbstractHandler

定义多个具体类 包括处理CSV、PDF以及Excel的处理器。

测试一下

输出结果

从上述的输出结果,我们可以看到每个不同类型的处理都具有相同的步骤,但是每个步骤有不同的处理。

其实,平时适合模式方法的场景还是很多的。下面再举一个扣税的示例。

例子2、扣税示例

以前遇到过一个场景,我们有不同渠道去扣税,每个渠道的输入报文各不相同,但是,其大致的流程有类似性:

如果每个渠道交易都写一遍,代码会产生冗余,还会产生其他各种不一致的问题。需要做的就是从业务特点出发,做如下几点改造:

  • 统一输入参数在流程中的标准化,统一将交易的入参赋值成一个PayDetailRecord对象
  • 流程采用统一模版来处理,不同子类主要负责构建PayDetailRecord对象,处理个性化的点
  • ... ... 

简单的一些伪代码如下:

统一扣税对象

模版

回调函数

客户端Client

这种做之后,每个渠道交易只要继承模版类(AbstractPayTaxTemplate),然后重写必要的个性化方法即可,更加易于扩展和维护。这就是一个模板方法模式的思考应用。

小结

模板方法模式 vs. 策略模式

比较

在Template Method模式中,可以使用继承改变程序的行为。这是因为Template Method模式在父类定义程序行为的框架,在子类中决定具体的处理。

与此相对的是Strategy模式,它可以使用委托改变程序的行为。与TemplateMethod模式中改变部分程序行为不同的是,Strategy模式用于替换整个算法。

策略模式参考:漫谈模式之策略模式

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: 漫谈模式之模版方法模式(模版方法和策略模式)
本文地址: https://pptw.com/jishu/371.html
漫谈模式之行为模式小结(行为模式的概念) 学习研究Jrebel自建激活服务器 – 支持全部版本IDEA

游客 回复需填写必要信息