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

java - 如何动态加载策略(策略模式)?

我的应用程序将对我的对象有不同的策略。实现它的最佳方法是什么?理想情况下,我想从某个关系数据库动态加载策略实现。不过,我不确定该怎么做。最好的方法是什么?

例如,假设我们想对Strategy123object应用策略MyObj:我们只是从数据库中加载对象,使用它的 ID 123,反序列化它,获取 Strategy 类,并使用它MyObj

这种方法在维护方面可能存在一些问题:虽然乍一看听起来更容易,但从长远来看可能会很痛苦,例如,如果策略的界面发生变化。

我还有什么其他解决方案?我想要一个允许我将策略类保留在代码库之外的解决方案,这样如果我的策略发生更改或添加新策略,我就不需要修改代码并重新部署应用程序。

0 投票
4 回答
3771 浏览

design-patterns - 策略的替代模式

我有一段代码开始实施策略模式,如下所示:

该接口上只有一个 Calculate 方法。实施后,结果证明所有 3 个具体类型的 Calculate 方法代码和两个名称相同的 Properties 都具有相同的代码,只是设置了不同的值。

因此,为了消除重复,我将接口设置为抽象类,并将方法和属性向下移动,只需在具体类型的构造中使用它们各自的值设置基本属性。

现在我知道模式不是硬性规定,只是指导方针,但我已经把它从指导方针中扭曲了,我不禁认为还有另一种模式我应该看看?

任何人都可以建议任何其他方法,让我离开,这样就可以很容易地添加新的“策略”。事实证明,我们需要在其中一些新案例中改变逻辑,那么我该如何构建它,这样我就没有重复的代码,但有一个灵活的设计让我可以改变事情呢?

谢谢。

0 投票
2 回答
105 浏览

oop - 动态 GetHash 函数的类设计

我需要计算几种类型实例的内部哈希码(某些类型是相互派生的)。这里有两个方面是动态的,可以独立变化。只有请求散列的客户端知道要使用什么散列算法以及要包含什么属性。

  1. 用于哈希计算的实际算法可能会改变。
  2. 哈希计算应考虑每种类型的哪些成员可以更改。

您将如何围绕这些要求设计您的类型?

0 投票
2 回答
959 浏览

java - javadoc中的策略模式

由于研究原因,我正在搜索 Javadoc 以确定内部“策略模式”的实现。Javadoc我发现 2 个类实际上是从FilterInputStream该类继承的,该类BufferedInputStreamDataInputStream. 继承的类会覆盖类的read()方法FilterInputStream。现在根据“策略模式”,我必须从另一个类中找到一个方法,Javadoc该方法在其主体中read()也被调用。任何人都可以帮助我吗?

PS 如果您有任何其他在 Javadoc 中实现的策略模式,请告诉我。

提前致谢

0 投票
9 回答
20498 浏览

oop - 策略与桥梁模式

我知道以前有人问过这个问题(例如,桥模式和策略模式有什么区别?)。

但是,有人可以使用明确的示例来解释,有什么区别以及在何种情况下必须选择一个而不是另一个?更少的概念理论,更实际的“现实生活”场景将受到赞赏。

0 投票
3 回答
1315 浏览

c# - 避免与策略模式耦合

我正在尝试将策略模式应用于特定情况,但是在如何避免将每个具体策略耦合到为其提供数据的上下文对象时遇到了问题。下面是一个模式的简化案例,它以几种不同的方式出现,但应该以类似的方式处理。

我们有一个对象Acquisition,它提供与特定时间框架相关的数据——基本上是一堆使用不同硬件收集的外部数据。由于它包含的数据量,它已经太大了,所以我不想给它任何进一步的责任。我们现在需要获取其中的一些数据,并根据一些配置向硬件发送相应的电压。

因此,想象一下以下(非常简化的)类:

现在,每个具体的策略类都必须耦合到我的 Acquisition 类,这也是最有可能被修改的类之一,因为它是我们应用程序的核心。这仍然是对旧设计的改进,旧设计是类中的一个巨大的switch语句Acquisition。每种类型的数据可能有不同的转换方法(虽然Battery是简单的传递,但其他的根本不是那么简单),所以我觉得策略模式或类似的应该是要走的路。

我还会注意到,在最终实现中,IAnalogOutputter将是一个抽象类而不是一个接口。这些类将位于用户可配置的列表中并序列化为 XML 文件。该列表必须在运行时可编辑并被记住,因此 Serializable 必须是我们最终解决方案的一部分。万一它有所作为。

如何确保每个实现类都获得工作所需的数据,而不将其绑定到我最重要的类之一?还是我以完全错误的方式处理这类问题?

0 投票
4 回答
822 浏览

c++ - 如何将“this”作为参数传递给另一个没有循环依赖的类构造函数?

我正在特别考虑策略模式(设计模式,GoF94),其中建议传递给策略构造函数的上下文可以是包含策略(作为成员)本身的对象。但以下方法不起作用:

然后 StrategyBase 及其子类访问 Analysis 的数据成员。

这是行不通的,因为您无法在定义之前实例化 Strategy* 类。但它的定义取决于分析的定义。那么你应该怎么做呢?将选择策略替换为

并在#include analysis.h和strategy.h的文件中进行实例化?这里的最佳做法是什么?

0 投票
4 回答
230 浏览

c# - 如何在运行时实现多种策略的使用

我需要处理从服务返回的记录列表。
但是,记录的处理算法会根据记录上的某个字段完全改变。
为了实现这一点,我定义了一个只有一个方法的 IProcessor 接口:

IProcessor对于不同类型的处理,我有两个具体的实现。
问题是我需要同时使用所有实现IProcessor..所以我如何将它注入IProcessor到我的引擎类中来驱动整个事情:

这就是我目前正在做的事情..它看起来不太干净。
关于如何改进这个设计的任何想法......也许使用 IoC?

0 投票
2 回答
279 浏览

design-patterns - 有人可以向我展示一个使用方案的策略模式的简单示例吗?

我是设计模式的新手,我正在尝试学习策略模式。在阅读了此处和 oodesign.com 上的大量示例后,我对其意图有了一个公平的理解。但是,我发现的大多数示例都是用 Java、C# 或 C/C++ 编写的;这些语言更有条理,并迫使您上课等。当谈到像方案这样的动态语言时,我很难想象如何实现这种模式。有人可以给我举个例子吗?

0 投票
5 回答
2477 浏览

design-patterns - 策略模式应该是无状态的吗?

作为“四人组”策略的类必须完全无状态(即没有字段)还是可以包含不可变状态(即最终字段)?