`

模板方法模式Templete Method 固定算法骨架

阅读更多
定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
public abstract class AbstractClass {
  public abstract void doPrimitiveOperation1();
  public abstract void doPrimitiveOperation2();
 
  public final void templateMethod() {
    doPrimitiveOperation1();
    doPrimitiveOperation2();
  }
}

按照模板方法模式的定义和结构,定义出一个抽象的父类,在这个父类中定义模板方法。对于公共的功能,就放到这个父类中实现,而这个父类无法决定的功能,就延迟到子类去实现。

模板方法模式采用抽象方法而不是接口的原因:
接口是一种特殊的抽象类,所有接口中的属性自动是常量,也就是public static final的,而所有接口中的方法必须是抽象的。

抽象类:抽象类不一定包含抽象方法;有抽象方法的类一定是抽象类。

通常在既要约束子类的行为,又要为子类提供公共功能的时候使用抽象类。

好莱坞法则:不要调用我,让我来调用你。

在模板方法中,如果需要得到某些对象实例的话,可以考虑通过工厂方法模式来获取,把具体构建对象的实现延迟到子类中去。

在java中,还有另外一个方法可以实现同样的功能或效果——java回调技术。通过回调在接口中定义的方法,调用到具体的实现类中的方法,其本质同样是利用java的动态绑定技术。使用匿名内部类来实现回调方法。

模板方法模式的一个非常典型的应用,就是实现排序功能。

原语操作:就是在模板中定义的抽象操作。

钩子操作:在模板中定义,并提供默认实现的操作。
分享到:
评论

相关推荐

    设计模式C++学习之模板方法模式(Template Method)

    模板方法模式(Template Method)是设计模式中行为型模式的一种,它定义了操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。这个模式在C++编程中有着...

    C++标准模板库(The C++ Standard Templete Libray)

    总之,《C++标准模板库(The C++ Standard Template Library)》一书不仅详细介绍了STL的核心概念和使用方法,还深入探讨了其设计思想和实践技巧,是每一位C++程序员都应该掌握的重要资源。通过学习和应用STL,程序员...

    CodeGenerator-T4模板代码生成器

    5.选择对应的模板(选中模板后点VIEW可以打开模板进行查看/编辑) 模板是T4模板,置于Templete文件夹下,程序运行时会自动把此目录下的所有T4文件读出来. 6.点TEST查看根据第一个模板生成的效果 7.设置命名参数/数据...

    MySql数据库CodeSmith模板

    MySQL数据库CodeSmith模板是一种高效的代码生成工具,它利用CodeSmith的强大功能,自动化地根据MySQL数据库中的表结构生成相应的代码,从而极大地提高了开发效率。CodeSmith是一款流行的数据驱动的代码生成器,它...

    VS 模板

    VS模板是Visual Studio中的一个重要组成部分,它为开发者提供了一种快速创建新项目或文件的便捷方式。Visual Studio作为Microsoft开发的一款强大的集成开发环境(IDE),广泛应用于各种软件开发任务,包括但不限于C#...

    C++ templete

    模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型。  模板是一种对类型进行参数化的工具;  通常有两种形式:...

    redis-templete

    Redis_Templete是一个关于在不使用Spring Data Redis的情况下操作Redis的示例项目。在这个项目中,我们将探讨如何直接通过Jedis或Lettuce等客户端库与Redis进行交互,以实现常见的数据存储和检索功能。虽然Spring ...

    sage_latex_template_3_0.zip_LaTeX模板_SAGE Latex_latex_sage_latex_

    总的来说,SAGE LaTeX模板提供了一种高效、专业的方法,让科研工作者在撰写学术论文时,能方便地进行数学计算,同时保证了文档的美观和规范。对于需要处理大量数学表达式和计算的领域,如数学、物理和工程学,这款...

    matlab模板

    Matlab 模板 - 传感器故障诊断方法 本文提出了一种基于经验模式分解(EMD)和支持向量机(SVM)的传感器故障诊断方法。该方法通过对传感器输出信号进行经验模态分解,得到多个固有模态函数(IMF),然后对每个 IMF ...

    Rolly Vortex Templete 1.0.2.rar

    “Rolly Vortex Templete 1.0.2.rar”是一款基于Unity引擎的项目模板,专为游戏开发者设计,旨在帮助他们快速搭建具有动态物理效果的3D游戏场景。这款模板的核心特色在于其独特的“Vortex”(漩涡)机制,可以实现...

    Hindawi_template.docx

    ### Hindawi Word模板知识点概述 #### 一、模板概述与适用范围 Hindawi出版社旗下的期刊采用统一的Word模板作为投稿的基本格式规范。该模板旨在为作者提供一个标准化的文档结构,确保论文在形式上的一致性和专业性...

    致远A8数据字典-协同模板.doc

    v3x_templete是指模板数据表,包括id、名称、排序、创建时间、描述等信息。 v3x_templete_auth v3x_templete_auth是指模板授权数据表,包括id、名称、排序、创建时间、描述等信息。 v3x_templete_config v3x_...

    arm7_bsp_templete.rar

    《基于ARM7的板级支持包(BSP)模板详解》 在嵌入式系统开发领域,板级支持包(Board Support Package,简称BSP)是至关重要的组件,它为特定硬件平台提供操作系统运行所需的底层驱动程序和服务。本文将深入探讨以...

    flow chart_templete.xlsx

    flow chart_templete.xlsx

    portainer-templates:各种Portainer应用程序模板

    适用于LinuxServer.io Docker容器的Portainer应用程序模板 这些可用于通过预定义设置轻松部署。 模板基于提供的数据。 请记住以下几点。 LinuxServer.io不支持这些模板 正在生成模板,因此我无法接受添加模板的...

    java链接mysql模板

    Java连接MySQL模板是Java开发中常见的一种技术,用于在Java应用程序中与MySQL数据库进行交互。在Java中,我们通常使用JDBC(Java Database Connectivity)API来实现这一目标。以下是关于这个主题的详细知识: 1. **...

    iebooktemplatemaker

    《IEBook模板编辑器——轻松打造专业电子书的利器》 IEBookTemplateMaker,顾名思义,是一款专为制作IEBook电子书而设计的强大工具。这款软件集模板编辑与制作功能于一体,使得即便是没有专业设计背景的用户也能...

    project plan templete

    根据提供的项目计划模板,我们可以详细地解析其中的关键知识点与各个任务环节所涉及的专业内容。 ### 项目的整体规划 #### 1. **项目规划 (PROJECTPLANNING)** - **时长**: 153天 - **描述**: 项目规划阶段是...

    Template:Android Studio自定义的Activity模板

    使用方法 将模板放入Android Studio安装路径/plugins/android/lib/templates/activities下面,然后重启Android Studio。 选择New——Activity——Gallery 就可以看到我们添加的activity模板了。 重装Android Studio...

Global site tag (gtag.js) - Google Analytics