今天要要介绍最後一个 Behavioral Patterns,也就是Template Method,我想大多数的人看到这个名字就可以约略的猜到这个模式是用来套版用的,现在就来了解它的运作模式吧!
假设现在有个程序是用来分析文件,使用者可以用各种格式(如TXT、CSV等等)的文档,再用此程序来提取这些文档中的资讯,而目前的程序会根据不同格式的档案,给对应的类别去处理文件,而这些处理不同格式档案的类别除了处理格式的程序完全不同,其他的资料处理程序几乎一模一样,因此程序的重复性很高。
要解决以上的问题,就可以使用模板模式。首先,我们将处理档案的步骤一一转成方法,而这些方法会由一个主要的方法(模板方法)来调用,这些都会写在抽象类别里面。然而这些步骤的方法可以是抽象的,不一定要先写好步骤内容,再来就让子类去实现所有的抽象步骤,如果需要的话,也可以复写一些可选步骤,但不是模板方法本身。
另外还有一种类型的方法,称为***hooks***,它是个可选的步骤,即使没有复写hook,模板方法还是能够运作。通常hook会放在关键步骤之前或之後,为子类提供额外处理资料的扩展点。
abstract class Template {
public final void MainMethod() {
if (step1()) {
step2();
}
step3();
}
public boolean step1() {
return false;
}
public void step2(){};
public abstract void step3();
}
class ConcreteTemplate1 extends Template {
public boolean step1() {
return true;
}
public void step2() {
// step2 operation
}
public void step3() {
// step3 operation
}
}
class ConcreteTemplate2 extends Template {
public void step3() {
// step3 operation
}
}
如果想要扩展处理流程的特定步骤,而不是整个流程或是其结构的话,就可以使用模板方法来解决此问题,它会将整个处理流程转换为一系列单独的步骤,因此子类就可以去实做或复写这些步骤,也不会改变父类别所定义的结构,不过可能会受到已定义的结构而限制了步骤的延伸,倘若模板方法的步骤越多的话,维护起来也就越困难。
以上就是Template Method的介绍,希望大家看完以後可以有所收获,并且能够实际的实做一次!
除此之外,也欢迎大家走走逛逛关於我们团队夥伴的文章
juck30808 - Python - 数位行销分析与 Youtube API 教学
SiQing47 - 前端?後端?你早晚都要全端的,何不从现在开始?
前言 有了资料後,就要进行分析,因此需要做出图表比较适合观察,所以我们现在来做图罗! 本日程序码使用...
先简单回顾一下,今天预计分析的题目: 53. Maximum Subarray 题目叙述:http...
text-transform属性是设定HTML元素的大小写转换方式 none : 无(预设值) ca...
React 元件拥有从产生、渲染 到被移除解放资源的各个阶段 称之为生命周期(Lifecycle)。...
试想:当员工遇不可归责之临时状况需要离开工作现场, 若员工原本的进度还能持续进行, 那该多好,以下就...