问题标签 [template-method-pattern]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
196 浏览

java - 模板作为类名的后缀是什么意思?

在很多程序中,都存在一个后缀为 Template 的 Class。例如org.springframework.web.client.RestTemplate, 等。

模板作为类名后缀是什么意思?这是否意味着模板方法模式

你知道原因吗?

祝你有美好的一天。

0 投票
1 回答
262 浏览

java - 通过模板方法模式将逻辑与日志分离

我可以使用此模板方法模式将逻辑与日志记录和异常处理分开,还是“不好的做法”?

例如我有这个代码:

还有我的孩子班:

我不会有不同的方法实现doEat()doSleep().

我想知道它是否值得,它是否是“坏习惯”。

0 投票
3 回答
3037 浏览

go - 在 Golang 中实现模板方法模式的优雅方式

在 Go 中是否有一种优雅的规范方法来实现模板方法模式?在 C++ 中,这看起来像这样:

在 golang 我写了这样的东西:

但是此代码因运行时空指针错误而失败。基本思想是将派生类(go structs)中的一些功能混合到基类例程中,以使基类状态可以从这个混合派生例程中获得。

0 投票
2 回答
1836 浏览

c++ - 实现模板化模板方法

注意:以下问题是关于模板方法设计模式C++ 函数模板的。为了区分两者,我将在提及设计模式时使用斜体,在提及 C++ 模板时使用粗体。

模板方法模式的思想是使算法的一部分可交换。这通常通过继承来实现,其中子类提供插入基类算法的具体实现。但是,如果钩子方法需要是模板,这将不起作用,因为模板不能是虚拟的。这是一个无法编译的简单示例:

有没有办法实现使用函数模板钩子的模板方法?

我对在Base任何地方使用该类作为类型不感兴趣。我将始终使用具体的特定类型来实现最大的编译时优化。所以这个问题的另一种表述是:我怎样才能创建几个Derived-1 .. Derived-n具有跨实现共享公共代码框架的函数模板的类?

0 投票
1 回答
1195 浏览

java - -Impl 后缀是 Java 中 Hook 方法的合法命名约定吗?

我正在查看一些旧代码,并在模板方法实现中找到了以下命名约定。

我希望钩子方法被命名为doAccept()acceptHook()而不是acceptImpl()

钩子方法在实践中是否使用了“-Impl”后缀?或者这是一个令人困惑的命名习惯?

0 投票
3 回答
1913 浏览

c# - C# 中的外观和模板方法模式有什么区别?

Facade 和 Template 方法模式有什么区别?它们都提供子系统的高级视图并将其对用户隐藏。

立面图案

模板模式

此示例取自O'Reilly 设计模式

在上面提供的示例中,外观和模板模式都实现了一个接口,并使用了一个抽象并定义了应该如何处理操作。我没有发现这两种模式之间有任何区别。谁能帮我理解一下。

0 投票
0 回答
34 浏览

c# - 在 C# 中调用基类构造函数之前无法格式化数据

我正在尝试在 C# 中实现模板方法模式,以处理继承TemplateFilter类的所有子类之间的不同行为。

子类之一是:

最后,类Operand

我的问题是我不能从TemplateFilter调用Operand构造函数,因为它需要 setValues 为 statc。另一方面,如果我将 setValues 设置为静态,我不能从TemplateFilter.setValues调用方法formatResult并让子类负责实现所需的行为。那么,为了在不改变架构的情况下实现这种机制,我能做些什么呢?

0 投票
1 回答
359 浏览

java - 空方法会破坏模板方法模式的结构吗?

在模板方法模式中,我们有一个定义为抽象的超类。我们有扩展这个类的具体类。

假设我们在模板方法中添加了一个新函数,并在一些子类中覆盖了它(仅在某些类中使用)。我们在其他类中将这个新方法覆盖为空(函数没有主体)。

此操作是否算作代码重复?

在此处输入图像描述

例如,在模板方法中,我们有一个新函数 doA()(我坚持使用 doA() 作为钩子方法)。我只想在 Class1 和 doZ() 和 doY() 之间使用这个函数。

如果我将此函数添加到模板方法并在 Class2 中覆盖此函数为空。这算作代码重复吗?

0 投票
1 回答
52 浏览

c++ - 创建一个类方法模板,该模板将使用稍后实现的功能

是否有可能实现这种行为?它不必使用继承,我只想通过泛型参数传递(使用 c++ 模板)来实现模板方法设计模式。

0 投票
1 回答
1387 浏览

design-patterns - 一起使用模板方法和策略

Gang of Four 总结了Template MethodStrategy的区别如下:

模板方法使用继承来改变算法的一部分。策略使用委托来改变整个算法。

在哪些情况下组合两种设计是合理的,它们的关系会是什么样子?

简单的示例将涉及在模板方法的钩子方法中委托给策略,但是,我想不出这种设计的充分理由。此外,与其委托给子类,不如直接委托给 Strategy。但是,如果没有继承,我们就根本谈不上模板方法。