问题标签 [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 回答
183 浏览

.net - 模板化代表

我有以下代码模式:

唯一的区别是方法的返回类型以及参数的数量和类型可能会有所不同。

我想创建一个通用/模板化方法来处理除“做一些工作”部分之外的所有代码,如何实现。

0 投票
1 回答
342 浏览

php - 模板方法设计模式中对象的状态

这是来自http://sourcemaking.com/design_patterns/template_method/php的基本抽象类中算法的实现示例

我不喜欢它,因为我认为“showBookTitleInfo”对它调用的方法了解太多。

这是另一个示例抽象类 template_method { var $state; 公共函数 __construct() { $this->state = 0; }

如果我们不更改它的值,为什么我们将事件作为引用传递?我应该如何实现“我的步骤”逻辑,如果他们正在使用当前状态,可以修改其值,其他步骤可以读取修改后的值并且也可以修改它?

例如,我想为预定的消息发送实现成本计数机制 - 简单且重复(例如:每个星期一、星期五,直到 2009 年 5 月 23 日)。

所以,我在抽象类中实现算法如下:

我是否朝着正确的方向前进?应该在哪里实现模板方法设计模式?如果这段代码有问题,请告诉我。

PS成本计数器不是生产代码。我写它是因为我想给你一个想法。

提前致谢

0 投票
19 回答
72818 浏览

design-patterns - 模板方法和策略模式有什么区别?

有人可以向我解释一下模板方法模式和策略模式有什么区别吗?

据我所知,它们 99% 是相同的——唯一的区别是模板方法模式有一个抽象类作为基类,而策略类使用由每个具体策略类实现的接口。

然而,就客户而言,它们以完全相同的方式被消耗——这是正确的吗?

0 投票
2 回答
1899 浏览

oop - 模板方法和策略设计模式

这可能是一个新手问题,因为我是设计模式的新手,但我正在查看模板方法和策略 DP,它们看起来非常相似。我可以阅读定义、检查 UML 并查看代码示例,但在我看来,策略模式似乎只是使用模板方法模式,但您只是碰巧将它传递给对象(即组合)。

就此而言,模板方法似乎只是基本的 OO 继承。

我是否错过了他们差异的一些关键方面?我是否遗漏了一些关于模板方法的东西,使其不仅仅是基本继承?

注意:之前有一篇关于此的文章(672083),但更多的是关于何时使用它,这有助于我更多地了解它,但我想验证我对模式本身的想法。

0 投票
1 回答
111 浏览

.net - 通过 C# 事件实现模板方法模式是一种好习惯吗?

我现在试图理解一些代码,我发现了一个模式,这对我来说似乎有点奇怪。有一个带有“EditorOpen”事件的用户控件类。起初,我认为这个名称不正确,因为它不像 MSDN 建议的那样以“-ing”或“-ed”结尾。但是,后来我发现,这个事件并没有通知发生的事情,而是某种请求来进行实际操作。这是客户端代码,预计会执行“打开编辑器”!

我有点惊讶地发现这实际上是某种形式的模板方法设计模式,其中可以有多个操作与单个操作占位符相关联。

我认为这很有趣,但我也担心在这种情况下使用事件可能会产生高度误导。无论如何,我们在这里讨论的不是 EVENTS,而是 REQUESTS。嗯...也许没问题,只要事件的名称是“EditorOpeningRequest”或“EditorOpeningRequested”。你怎么看?在代码审查期间你会如何评论这个?

0 投票
3 回答
779 浏览

java - 模板方法模式

如果我的 childClass 方法 getInfoFromDB() 和 saveToDB() 需要执行不同的逻辑,我可以知道如何创建 childClass 吗?

0 投票
9 回答
13863 浏览

design-patterns - 我们应该在哪里使用模板方法 - 模式?

谁能告诉我一些应该使用模板方法 - 模式的示例情况?

根据您自己的经验,给我一些实际使用。

(到目前为止,我发现它仅对 DA 层中的映射数据有用。对不起!!!)

0 投票
1 回答
844 浏览

design-patterns - SRP 应用于工作流示例:如何以合理的方式构造类

我在决定班级责任时遇到了问题。
我有 3 个 html 表单:

  1. 对于每个表单,都有一个 html 模板,其中包含一些文本和要包含的表单的标记
  2. 每个表单都需要验证,如果有错误,则需要重新显示 (1) 中的模板和表单,以及一些错误消息。只有一些字段在不同的表单中是通用的。
  3. 如果没有错误,则需要邮寄结果消息。每个表单都有一个结果邮件模板。

我发现很难为这个问题决定一个好的班级计划。一种可能性是按功能分离类

  • CheckFormData:检查表单数据
  • DisplayForm:显示有/无错误的表单(或者也分开这个?)
  • 电子邮件表格:电子邮件表格。

我对此不确定。关于一种特定形式的领域的知识分散在各个类别中。

有一些工作流程。也许我还应该有一个工作流类:

对于每种表单类型(请记住,其中有 3 个),我需要一个

  1. CheckForm,
  2. EmailForm
  3. DisplayForm班级。

3*3 = 9 个类 + 3 个基类 = 12 个类。
此外,您想将正确的 CheckForm-subclass 和 EmailForm-subclass 注入工作流程,它们都需要具有相同的表单类型。也许我们需要为此创建一个 FormWorkFlowFactory。这样一共有13 个类。

现在我觉得我做错了可怕的事情。如果我有FormSubmitWorkFlow一个模板方法类,我可以创建 3 个子类,但每个子类会混合不同的职责。

你如何改进这一点,你能激发你的答案,即什么方法引导你得到答案?


编辑:虽然当前唯一的答案很有用,但很高兴看到同意它的人的一些投票,或者我想听到社区提供更好的解决方案。我是唯一一个赞成这个答案的人。这个问题可以使用更多的输入,所以请随时提供:-)

0 投票
3 回答
1673 浏览

design-patterns - 模板方法(分离)和策略模式之间的区别?

我的老师是一位非常好的老师,我倾向于理解他的观点,但这一点让我无法理解。他用两种变体解释了模板方法;
- 统一:标准变体,由一个抽象类和一些抽象方法组成,这些抽象方法定义了其他固定算法的变体部分。
- 分离:他自己的变体(我认为?),其中一个类包含 templateMethod() 并使用对接口的委托来改变算法的各个部分,这在我看来与策略模式完全一样。

谁能明白他的观点是什么,以及“分离”变体与策略模式有何不同?
我附上了一张图片,其中包含他书中的两种模式(尚未出版)。

http://img64.imageshack.us/img64/3620/strategytemplate.jpg

0 投票
2 回答
2377 浏览

c++ - C++:NVI 和模板方法模式之间的区别?

NVI(非虚拟接口)和模板方法模式有什么区别?

它们看起来非常相似,我读过它们基本上是相同的,并且它们之间存在细微的差异,因为 Template 更普遍。