当前位置: 首页 > 知识库问答 >
问题:

模板法设计模式是控制反转的一个例子吗?

暨高洁
2023-03-14

最近在一次采访中,我解释了我所研究的一个框架。我说过,我们通过使用模板方法设计模式提供扩展性,创建了一个控制反转。我说这是一个控制反转的例子,我们的框架调用框架用户实现的方法,采访者说模板方法设计模式不是IOC的例子。我想知道我对国际奥委会的理解是否有误?

共有2个答案

诸正谊
2023-03-14

是的,模板模式是IOC的一个例子,IOC可以通过使用模板模式以及其他一些技术(DI等)来实现。在继承中,子类从父类调用方法,但使用模板模式,我们使用基类中的最终方法实现定义了一个算法(子类无法更改的步骤序列),如下面提到的示例所示,基类/父类正在调用将在子类中定义的方法,因此控制权是反向的,基类对核心算法具有控制权,所以这就是为什么在这种情况下实现IOC的原因和位置。

例如,假设我们需要处理一个文件。

public abstract class FileProcessor {
    public final void processFile() {
        preProcess();
        process();
        postProcess();
    }

    public abstract void preProcess();
    public abstract void process();
    public abstract void postProcess();
}
薛扬
2023-03-14

你的面试官错了。模板方法模式确实使用了控制反转。事实上,维基百科的条目特别提到了它。

http://en.wikipedia.org/wiki/Template_method_pattern

模板方法用于框架,每个框架实现域架构的不变部分,为定制选项留下“占位符”。这是控制倒置的一个例子,也称为好莱坞原则。

不幸的是,您要么不太了解IoC,要么不太了解模板方法模式,无法向他们解释为什么它是IoC的一个示例。不幸的是,许多人似乎认为IoC意味着依赖注入,仅此而已。

 类似资料:
  • 我在读设计模式,特别是模板方法,这时我的注意力被这个问题吸引住了。 在阅读了解释和具体代码之后,我仍然想知道为什么这是一个“模板方法”设计模式的示例。 根据GoF,这种模式的目的是: "在操作中定义算法的框架,将一些步骤推迟到子类。模板方法允许子类在不改变算法结构的情况下重新定义算法的某些步骤。" 有两名参与者: AbstractClass:定义抽象基元操作,具体子类定义抽象基元操作以实现算法步骤

  • 对于一些家庭作业,我们必须设计一个示例(带有类),其中策略和模板方法设计模式结合在一起,相互补充,从而使它们更具可定制性。或者“使用模板方法提供更多的可定制性来处理各种策略”。 经过大量阅读和最初的困惑,我想到了将两种动物作为类,和,并让它们都使用接口来实现特定的功能,移动(这样狗可以行走,蛇可以滑行)。我认为这是策略模式的一部分,因为它们各自单独实现自己的移动功能。 为了将模板方法模式融入其中,

  • 模板方法(Template Method) Intent 定义算法框架,并将一些步骤的实现延迟到子类。 通过模板方法,子类可以重新定义算法的某些步骤,而不用改变算法的结构。 Class Diagram Implementation 冲咖啡和冲茶都有类似的流程,但是某些步骤会有点不一样,要求复用那些相同步骤的代码。 // java public abstract class CaffeineBeve

  • 介绍 模板方法(TemplateMethod)定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 模板方法是一种代码复用的基本技术,在类库中尤为重要,因为他们提取了类库中的公共行为。模板方法导致一种反向的控制结构,这种结构就是传说中的“好莱坞法则”,即“别找找我们,我们找你”,这指的是父类调用一个类的操作,而不是相反。具

  • 1. 前言 本节课和大家一起使用模板设计模式重构 Hibernate 操作流程,通过本节课程内容,你将了解到: 如何运用模板设计模式重构 Hibernate 操作流程; 持久化对象与序列化接口; 2. 模板设计模式 学习 Hibernate 的过程,如同训练场上练兵。终有一天,你要奔赴真正的战场(真实项目)。 所以,随时随地,要审视代码、重构代码。 2.1 什么是模板化操作 OOP 中有一个编码原

  • Android适配器是否使用适配器设计模式?GoF设计模式书将适配器设计模式描述为 适配器模式将一个类的接口转换为客户机期望的另一个接口。Adapter允许由于接口不兼容而无法正常工作的类一起工作。 适配器实现了一个目标接口,客户机使用(预期)一个适配器,适配器将客户机发出的所有请求委托给该适配器。 我知道它的理论和现实世界中的模式适配器接口看起来并不完全像它,但我仍然无法弄清楚android适配