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

java - 参数化策略模式

我有几个实现策略模式的 Java 类。每个类都有不同类型的可变数量参数:

现在我希望用户可以在某种 UI 中输入参数。UI 应该在运行时选择,即策略应该独立于它。参数对话框不应该是单一的,并且应该有可能使它的行为和外观对于每个策略和 UI(例如控制台或 Swing)都不同。

你将如何解决这个问题?

0 投票
3 回答
3817 浏览

c# - 成本计算器应用程序的设计模式?

我有一个问题,我之前尝试过寻求帮助,但当时我无法解决它,所以我现在尝试简化问题,看看我是否可以得到一些更具体的帮助,因为它快把我逼疯了……</p>

基本上,我有这个应用程序的工作(更复杂)版本,它是一个项目成本计算器。但是因为我同时试图学习更好地设计我的应用程序,所以我想就如何改进这个设计提供一些意见。基本上,我想要的主要内容是输入(此处)在两个地方重复出现的条件。之前得到的建议是使用策略模式或者工厂模式。我也知道 Martin Fowler 的书,其中包含使用多态性重构条件的建议。我在他更简单的例子中理解了这个原则。但是我怎么能在这里做这些事情(如果有的话)?在我看来,计算取决于几个条件: 1. 它是一种什么样的服务,写作还是分析?2.项目小吗,中型还是大型?(请注意,可能还有其他参数,同样不同,例如“产品是新的还是以前存在的?”所以应该可以添加这样的参数,但我尽量保持示例简单,只需要两个参数能够得到具体的帮助)

因此,使用多态进行重构将意味着创建许多子类,我已经为第一个条件(服务类型)创建了这些子类,我真的应该为第二个条件(大小)创建更多子类吗?那会变成什么,AnalysisSmall、AnalysisMedium、AnalysisLarge、WritingSmall 等等……???不,我知道这不好,我只是不知道如何使用这种模式?

对于使用策略模式的建议,我基本上看到了同样的问题(我认为工厂模式只是实现上述多态性的帮手)。因此,如果有人对如何以最佳方式设计这些课程有具体建议,我将不胜感激!还请考虑我是否也正确选择了对象,或者是否需要重新设计它们。(像“你应该考虑工厂模式”这样的回应显然不会有帮助......我已经走上了这条路,我对这种情况下的确切方式感到困惑)

问候,

安德斯

代码(非常简化,不要介意我使用字符串而不是枚举,不使用配置文件来存储数据等,一旦我掌握了这些设计问题的窍门,这些代码将在实际应用程序中根据需要完成):

0 投票
2 回答
719 浏览

hibernate - 使用 Hibernate 和 Spring 管理策略对象

这是一个设计问题,可以用 Stack Overflow 类比更好地解释:

用户可以获得徽章。用户、徽章和获得的徽章存储在数据库中。徽章的逻辑由徽章条件策略运行。我宁愿不必在数据库中存储徽章条件策略,因为它们是复杂的树结构对象。

如何将存储在数据库中的徽章与其徽章条件策略相关联?我只能想到解决方法。例如:为每个徽章创建 1 个类并使用 SINGLE_TABLE 继承策略。或者从数据库中获取徽章,然后以编程方式查找并注入正确的徽章条件策略。

感谢您提出更好的设计。

0 投票
6 回答
477 浏览

c++ - 哪种设计模式最合适?

我想创建一个可以使用四种算法之一的类(并且要使用的算法仅在运行时才知道)。我在想策略设计模式听起来很合适,但我的问题是每个算法都需要稍微不同的参数。使用策略,但将相关参数传递给构造函数,会不会是一个糟糕的设计?

这是一个示例(为简单起见,假设只有两种可能的算法)...

0 投票
2 回答
1294 浏览

tdd - 带有策略模式的 TDD

我正在尝试使用 TDD 实现策略模式。每个策略项都实现一个接口。使用 TDD 执行此操作的最佳方法是什么?

您是否必须为接口的每个实现创建一个测试夹具,但在每个实现上测试相同的方法?

任何详细说明采取的方法的文章都将受到欢迎:)

0 投票
2 回答
5508 浏览

java - .NET Action 的 Java 等效项和功能, ETC

Java 中是否有任何标准的通用“回调”或“函数/方法”类型,例如.NETSystem.Action<T>System.Func<T,U>.NET?

在我的具体情况下,我需要一个类来包装一个方法,该方法采用一个(通用)类型参数T并且不返回任何内容(即void)。

是的,为自己创建这样一个类/接口很容易,但如果有一个标准库类,我更喜欢它。

0 投票
1 回答
2220 浏览

design-patterns - Naming convention for common patterns?

Just as there is a naming convention for the Observer pattern (or rather, a naming convention for events in languages such as C#) using Event/Handler passing EventArgs and such, are there naming conventions that you use to easily highlight other patterns in your code?

edit: I originally wanted to ask about the Strategy pattern, but figured it would be helpful to know about any other conventions that might exist for common patterns as well.

0 投票
6 回答
2905 浏览

c# - 在应用策略模式时,是否有避免某些子类中未使用的方法参数的好方法?

我有以下场景,我有不同种类的销售算法来计算销售价格。FixedSaleStrategy 不需要 basePrice 参数,而所有其他策略实现都需要它。有没有避免这种冗余参数的好方法?

0 投票
1 回答
313 浏览

objective-c - Coredata:策略模式实现

我正在尝试使用 Core Data 和 Objective C 来实现策略模式。

为了简化,我有一个多语言Text实体,它有几个属性,例如Date最后保存的和NSSString作者等等。我想添加对Language实体的引用,它可以是几个子类之一,例如asFrenchItalian,以类名的语言保存一个NSStringof 文本。每个Language子类都可以实现自己的方法translateTotranslateFrom方法,Text实例不需要担心。简单的策略模式。

由 yuml.me 创建 http://yuml.me/1caedd69

我真的很难与 Core Data 建立这种关系,在这种关系中,可以根据实例的细节Text使用自己的实现来设置某个实体。Language

我想简而言之,我想要做的是创建一个“has-a”关系,其中实体内部的Text实体可以是Language.

Core Data 对我来说很新,所以如果我完全错过了这里的重点,或者错过了一些非常明显的东西,请告诉我。

0 投票
7 回答
6115 浏览

c# - 如何在 C# 中使用策略模式?

这是我到目前为止所拥有的:

现在,如果我有一个 Character.cs 超类。该超类如何实现武器行为,以便子类可以更具体。

我该如何实施?我对实际代码需要什么感到非常困惑。

我知道这可能要求太多,但是如果您可以编写实际代码以便我可以研究它,那对你们非常好。我通过看代码来学习。:P 许多人可以从这个问题中受益。