问题标签 [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.
design-patterns - 实施策略模式
在实现策略模式时,将决定使用哪种策略的代码放在哪里?一些示例伪代码会有所帮助。
java - 使用策略模式的 Java 电子邮件程序
更新:又增加了一个问题(问题#4)。
大家好,
我正在为自己构建一个自定义电子邮件实用程序。现在,为了遵守单一职责原则,我想要以下类:MailerSender、MailProvider 和 EmailObject。MailSender 更像是一个代表,请查看以下内容:
MailSender 需要一个 IMailProvider 电子邮件提供商来完成发送电子邮件的工作。在下面找到它:
我在上面定义了一些策略,但它可以扩展到任何数量。由于 MailSender 可以随时更改它的提供者,它有效地实现了策略模式,对吧?
EmailObject 是一个包含相关电子邮件信息的 POJO:
客户端代码将如下所示:
我的问题是:
1. 我是否实施了策略模式?
2、这个设计好不好?MailProvider 知道 EmailObject 是否有意义?
3. 如果我以后有一个新的 EmailObject 需要附件怎么办?
4. 客户端代码现在需要在创建 MailSender 之前获取特定的 MailProvider ......这有意义吗?
design-patterns - 成本装饰师
对于每个产品,都有相关的成本计算器,如:折扣、商家折扣、商家奖金、每月折扣等。未来,将添加更多成本计算器。
对于每个成本计算,我们都有一个具体的产品类别和许多装饰器。所有产品都应使用所有计算器,因为计算器决定根据产品属性(如产品商家 ID、类别 ID、颜色等)应用其计算。
而且,我们的系统中有数百万种产品需要计算。所以,我们最好缓存装饰过的计算器。因为,在运行时装饰每个产品实体会很昂贵。但这对于装饰器模式来说很难。在我们的情况下使用这种模式似乎是一种气味。
你有什么建议?我们应该使用装饰器、策略还是责任链模式?或无模式。
java - 复合策略模式 - java - 这段代码有多糟糕?
这个问题是我之前帖子的延续: Java 中的访问者模式实现——这看起来如何?
我在重构代码时有点困惑。我正在尝试将我的访问者模式(在上一篇文章中解释)转换为复合策略模式。我正在尝试做这样的事情:
现在,我将定义这样的规则:
现在,我可以验证两种不同类型的对象。这两个可能完全不同:假设我有一个 Store that is Validatable
,然后一个Schedule
which is Validatable
。现在,如果我要编写一个看起来像这样的组合:
我会定义一个enum
定义哪些检查集去哪里......
最后,我会这样使用它:
我有一种奇怪的感觉,我的设计有缺陷。我不喜欢我的 Rule 界面需要Validatable
. 您能否建议我如何改进这一点?
感谢你的帮助。
oop - 模板方法和策略设计模式
这可能是一个新手问题,因为我是设计模式的新手,但我正在查看模板方法和策略 DP,它们看起来非常相似。我可以阅读定义、检查 UML 并查看代码示例,但在我看来,策略模式似乎只是使用模板方法模式,但您只是碰巧将它传递给对象(即组合)。
就此而言,模板方法似乎只是基本的 OO 继承。
我是否错过了他们差异的一些关键方面?我是否遗漏了一些关于模板方法的东西,使其不仅仅是基本继承?
注意:之前有一篇关于此的文章(672083),但更多的是关于何时使用它,这有助于我更多地了解它,但我想验证我对模式本身的想法。
design-patterns - 设计模式 - 策略模式
我是设计模式的初学者。
假设我正在开发一个 C# 应用程序来跟踪开发团队中各个成员执行的开发工作(即项目跟踪器)。
我试图从战略模式中获得灵感。
所以我正在设计我的类和接口如下:
我应该做些什么来改进这个设计?
design-patterns - 重构帮助 - 策略模式
这里的对象是更新 UI。我通常在客户端上执行此操作,但是此应用程序使用后面的代码。无论如何,我的问题是我正在尝试清理这些 if else 语句,并且我认为策略模式可能是合适的。我不需要为我完成所有事情,但如果你能给我一些指示,让我开始吧。我是否先创建一个接口,然后每个策略都实现该接口?泛型在这里有用吗?接口中应该有哪些类型的方法?任何能让我前进的事情都会非常感激。
谢谢,~ck
c# - 不同输入的不同算法
在我正在开发的应用程序中,我面临一种情况;我想知道是否有这种设计模式。如下
- 用户在 Web 界面上显示,并针对流程使用不同的算法
- 用户选择存储在数据库中。
- 现在,应用程序应该根据所选算法执行不同的计算。
什么是实施这个的好策略?现在我们正在做的是——
- 有一个参考数据库表,其中包含所有算法类型和代码中相应的类名(例如,如果是快速排序算法,那么我们存储 QuickSort)。每次出现新算法时都必须手动更新
在代码中,获取算法类型并使用反射实例化适当的算法类型。在 C# 中,我们使用类似于下面的代码
System.Reflection.Assembly 类型 = System.Reflection.Assembly.LoadFile(System.Reflection.Assembly.GetExecutingAssembly().Location.ToString());
foreach (Type t in types) if (t.Name==classname) createinstanceof(t) //classnames 是从数据库中的引用表中加载的所有类类型的列表。
我的直觉是应该有一个更简单/更好的方法来做到这一点,因为这似乎是一个非常标准的问题。我知道策略模式- 但我想要的是简化并可能删除手动任务。
php - Zend_Auth:为什么要验证名为适配器的对象而不是策略?
为什么它被称为适配器而不是策略?
c# - 是否可以将策略模式用于没有共同祖先的数据结构?
我有两个数据结构类(这是我的代码的简化版本)
- 动物:有一个属性“int Age”
- 人:拥有一个属性“DateTime Birthday”</li>
我想要完成的是编译“上传”(持久化到数据库),这在所有不同的数据结构类中都很常见。所以主要是我的目标是有一个小的上传方法,看起来像
但问题是,populator
返回一个不同类型的对象实例,我试图封装它,因为它们没有共同的属性。(下面代码中的 IDataPopulator.TResult Populate(string data))
有没有办法解决这个问题?还是策略模式不适合这种情况?
这是我一直在使用的代码