模板方法模式(Template Method)

这篇具有很好参考价值的文章主要介绍了模板方法模式(Template Method)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

模板方法模式是一种行为设计模式,在超类中定义了一个算法的框架,而将一些步骤的实现延迟到子类中,使得子类可重定义该算法的特定步骤。

Template Method is a behavior design pattern. It defines an algorithm framework in the superclass, 
but delays the implementation of some steps to subclasses, so that subclasses can redefine specific steps 
of the algorithm.  

结构设计

模板方法模式包含如下角色:
Abstract ­Class,抽象类,实现一个模板方法,定义了算法的骨架。需要说明的是,算法中的步骤可以被声明为抽象类型,也可以提供一些默认实现。
Concrete­ Class,具体类,按需实现算法步骤,但不能重写模板方法自身。
模板方法模式类图表示如下:
模板方法模式(Template Method),设计模式,模板方法模式,java,模板方法
一个模板方法用一些抽象的操作定义一个算法,而子类将重定义这些操作以提供具体的行为。通过使用抽象操作定义一个算法的一些步骤,模板方法确定了它们的先后顺序,但允许子类改变这些具体步骤以满足它们各自的需求。

伪代码实现

接下来将使用代码介绍下模板方法模式的实现。

// 1、抽象类,实现一个模板方法,定义了算法的骨架
public abstract class AbstractClass {
    // 将方法声明为final,表示该方法不可override
    public final void templateMethod() {
        operation1();
        operation2();
    }

    protected abstract void operation1();

    protected abstract void operation2();
}

//2、具体类,按需实现算法步骤
public class ConcreteClassA extends AbstractClass {
    @Override
    protected void operation1() {
        System.out.println("operation1 in a ConcreteClassA instance");
    }

    @Override
    protected void operation2() {
        System.out.println("operation2 in a ConcreteClassA instance");
    }
}
public class ConcreteClassB extends AbstractClass {
    @Override
    protected void operation1() {
        System.out.println("operation1 in a ConcreteClassB instance");
    }

    @Override
    protected void operation2() {
        System.out.println("operation2 in a ConcreteClassB instance");
    }
}

// 3、客户端
public class TemplateMethodClient {
    public void test() {
        // (1) 创建具体类示例
        AbstractClass classA = new ConcreteClassA();
        // (2) 调用模板方法
        classA.templateMethod();
        AbstractClass classB = new ConcreteClassB();
        classB.templateMethod();
    }
}

适用场景

在以下情况下可以考虑使用模板方法模式:
(1) 如果只希望子类扩展某个特定算法步骤,而不是整个算法或其结构时,可考虑使用模板方法模式。模板方法将整个算法转换为一系列独立的步骤,以便子类能对其进行扩展,同时还可让超类中所定义的结构保持完整。
(2) 当多个类的算法除一些细微不同之外几乎完全一样时, 可使用该模式。但其后果就是,只要算法发生变化,就可能需要修改所有的类。在将算法转换为模板方法时,可将相似的实现步骤提取到超类中以去除重复代码。子类间各不同的代码可继续保留在子类中。

优缺点

模板方法模式有以下优点:
(1) 仅允许子类重写算法中的特定部分,使得算法其他部分修改对其所造成的影响减小。
(2) 可将重复代码提取到父类中。
但是该模式也存在以下缺点:
(1) 部分子类可能会受到算法框架的限制。如果算法框架需要调整,则该模式不适用。
(2) 通过子类抑制默认步骤实现可能会导致违反里氏替换原则。
(3) 每一个不同的实现都需要一个子类实现,导致类的个数增加,使得系统更加庞大。模板方法中的步骤越多, 其维护工作就可能会越困难。

参考

《设计模式 可复用面向对象软件的基础》 Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides 著, 李英军, 马晓星等译
https://refactoringguru.cn/design-patterns/visitor 模板方法模式
https://www.runoob.com/design-pattern/visitor-pattern.html 模板方法模式
https://www.cnblogs.com/adamjwh/p/10968634.html 简说设计模式——模板方法模式文章来源地址https://www.toymoban.com/news/detail-628218.html

到了这里,关于模板方法模式(Template Method)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java设计模式 (一) 模板方法设计模式

    什么是模板方法设计模式? 模板方法设计模式是一种行为型设计模式,它定义了一个算法的骨架,并将一些步骤的具体实现延迟到子类中。模板方法模式可以帮助确保在算法的不同部分中保持一致性,同时也允许子类根据需要进行具体实现。 模板方法模式的关键特点包括:

    2024年02月12日
    浏览(42)
  • java设计模式学习之【模板方法模式】

    设想你正在准备一顿晚餐,无论你想做意大利面、披萨还是沙拉,制作过程中都有一些共同的步骤:准备原料、加工食物、摆盘。这里,整个烹饪流程就像一个模板,而具体的菜肴则在这个模板的基础上添加了特有的步骤。在软件开发中,我们经常遇到类似的情况,某些过程

    2024年02月03日
    浏览(46)
  • 设计模式详解(一):工厂方法——Factory Method

    工厂方法是一种创建型设计模式。所谓创建型设计模式是说针对创建对象方面的设计模式。在面向对象的编程语言里,我们通过对象间的相互协作,共同完成复杂的业务逻辑,因而对象之间存在着依赖关系。 当对象A依赖对象B时,我们不采取直接创建对象B的方式,即 B produ

    2024年02月16日
    浏览(37)
  • 【模板方法设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

    模板方法模式(Template Method Pattern)也叫模板模式,是一种行为型模式。它定义了一个抽象公开类,包含基本的算法骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变算法的结构,只是重定义该算法的某些特定步骤。不同的子类以不同的方式实现这些抽象方法

    2024年02月01日
    浏览(81)
  • Factory Method Pattern 工厂方法模式简介与 C# 示例【创建型】【设计模式来了】

    一句话解释:   实体类和工厂类均为单独实现,不影响已实现的类,方便扩展。 工厂方法模式(Factory Method Pattern)是一种创建型模式,它允许客户端通过工厂方法来创建对象,而不是直接使用构造函数。这样可以让客户端代码更加灵活,同时保持实现的独立性。工厂方法

    2024年02月06日
    浏览(41)
  • JAVA8-lambda表达式8:在设计模式-模板方法中的应用

    JAVA8-lambda表达式1:什么是lambda表达式 JAVA8-lambda表达式2:常用的集合类api JAVA8-lambda表达式3:并行流,提升效率的利器? JAVA8-lambda表达式4:Optional用法 java8-lambda表达式5:toMap引发的线上故障 JAVA8-lambda表达式6:重构和定制收集器 JAVA8-lambda表达式7:重要的函数接口 最近在公司

    2024年02月14日
    浏览(50)
  • 设计模式—模板方法模式

    定义一个操作的流程框架,而将流程中一些步骤延迟到子类中实现。使得子类在不改变流程结构的情况下,重新定义流程中的特定步骤。 主要角色: 抽象类: 负责给出操作流程的轮廓或框架,由模板方法和若干基本方法组成。   1、抽象方法:由抽象类声明,在具体子类中实

    2024年02月10日
    浏览(49)
  • 设计模式——模板方法模式

    模板方法模式(Template Method Pattern)是一种行为型设计模式,它在抽象类中定义了一个算法的框架,并将一些步骤延迟到子类中实现。这种模式使得子类可以在不改变算法结构的情况下重写算法中的某些特定步骤。 抽象模板类(Abstract Template Class): 定义一个操作中的算法骨架

    2024年01月17日
    浏览(46)
  • 设计模式---模板方法模式

            所谓模板方法模式,就是提供一种方法的模板来实现一种规范,其他人可以利用这个模板定义自己的逻辑。         在Java编程中的应用,主要就是通过接口或者抽象类来实现的,抽象类中可以把逻辑函数声明为final类型,表示不能被重写,即不能改变逻辑。在接口中

    2024年04月24日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包