问题标签 [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 投票
2 回答
2145 浏览

class - 模板方法模式和使用抽象(基)类之间的区别?

经过几个小时的(重新)搜索,我只是想不出普通抽象类和使用模板模式之间的可解释差异。

我唯一看到的是:在使用抽象类时,您需要实现所有方法。但是在使用模板方法时,您只需要实现这两个抽象方法。

有人可以向我解释一下模板模式的(缺点?)优点以及模板模式和抽象类之间的主要区别。

ps我只是想更好地了解这一点,以便我自己的理解/学习

编辑:感谢您的快速回复!但我会更好地解释它(因为它已经走对了:))。我知道什么是抽象类!(以及必须实现哪些方法的类!),并且我知道模板模式的基本思想(一种在类中定义的过程算法的骨架?)。我有点困惑,因为它们看起来很像!另外我不是英语,所以我有可能监督一些事情!提前 THNX

0 投票
4 回答
1128 浏览

java - 模板方法和策略设计模式有什么相似之处

这是模板方法模式的一个例子吗?

如果是这样,那么使用这种模式比策略模式有什么优势?

策略模式

我注意到的是 Strategy 模式封装了不同的东西,而 TemplateMethod 模式让子类处理了不同的东西。

0 投票
2 回答
245 浏览

c++ - 如何结合模板方法模式和多重继承?

我可以更改此代码以使其正常工作吗?是否可以结合模板方法模式和多重继承?在不同的类中实现不同的算法似乎很方便。谢谢你。

0 投票
3 回答
640 浏览

c# - 基类中模板方法的用途是什么?

好吧,我正在阅读MSDN 上这篇关于“基类用法”的优秀文章。虽然我了解基类和接口的概念,但我无法理解本文第二段(“受保护的方法和构造函数”)中模板方法的用法。

任何人都可以通过一个简单的实际示例帮助我理解这个概念吗?也许,了解模板方法的概念是一个很好的起点。

提前致谢。

0 投票
3 回答
1096 浏览

c# - 在 C# 中实现模板方法模式

模板方法模式规定抽象基类有一个不可覆盖的方法:这个方法实现了通用算法,不应该在子类中被覆盖。在 Java 中,模板方法final在抽象基类中声明,在 C# 中sealed关键字具有类似的含义,但不能声明未覆盖的方法sealed

我怎么解决这个问题?为什么不能阻止一个方法可以被子类覆盖(在 C# 中)?

0 投票
3 回答
90 浏览

java - 模板方法需要在子构造函数中声明一个对象

一个扩展母类的子类,它在其构造函数中调用子类中实例化的模板方法,因为它需要在子构造函数中获得一个值。

我怎么能做这样的事情,而不改变我的父构造函数(Foo,在这里。我不能在真正的 Foo 类中做任何改变):

在这里,即使我将 aValue 放在一个字段中,aValue 也不会在

我该如何解决我的问题?

我正在寻找任何模式,ULM,解决方案。

0 投票
2 回答
533 浏览

python - python中的模板方法调用顺序

单元测试运行功能的最简单方法是什么?在这里,我对fun * 函数的作用不感兴趣,但前提是它们的调用顺序正确。

该解决方案的唯一要求是对被测类的非侵入性。

解决方案:

实际上,这有点像草稿,这个简单的类可以以多种方式进行修复和扩展,我什至都懒得去想它。关键是您现在可以简单地将所有方法的所有调用记录在模板方法中。您还可以指定不应被该类模拟的对象列表(即您正在记录调用的函数)。

特别感谢@Damian Schenkelman,他给了我一些重要的指示。

您现在可以通过以下方式测试调用顺序:

您可以通过类名引用成员:

请注意,您列出了所有不应该被嘲笑的方法。

0 投票
1 回答
428 浏览

c# - 模板方法模式 - 防止派生类中的直接方法调用

我不确定我是否正确理解模板方法模式。

这是我简化的基类实现:

据我了解,基类知道算法流程并对其进行管理。问题是在实际项目中我有许多抽象方法,如果我能以某种方式阻止在派生类中直接调用它们会很好。当多个类管理算法流时,它是不可读的。

0 投票
4 回答
116 浏览

c# - 是否有可能有一个派生类不能调用但类的消费者可以调用的方法?

我正在实现模板方法模式。客户可以在此模板方法上更改一些设置;但我想阻止模板方法的实现者更改这些设置,因为在这种情况下,他们可能会破坏模板方法(基)类的不变量。如果可能的话,我希望这些东西无法编译。(否则是时候重构策略了:))

例子:

一种方法是重构策略,产生以下结果:

我很好奇是否有一种语言功能可以指示这种约束,而无需将重构应用于策略。

0 投票
2 回答
160 浏览

c++ - 如何将模板方法模式应用于具有不同签名的函数?

如何为以相同方式使用的功能集提供统一的接口?为了说明,请看一组给定的库函数:

并假设它们以相同的方式使用:

A)什么是提供getSize()和的好方法getValue()

我首先认为模板方法模式是我想要的,但我无法应用它,因为与模板方法模式中的 Worker 相比,我的函数具有不同的签名。

所以我做了什么:

B)这是一个好方法吗?