【问题标题】:Strategy Pattern with default strategy具有默认策略的策略模式
【发布时间】:2011-08-04 06:10:01
【问题描述】:

在设计模式方面,我是个初学者。关于实施策略模式的任何想法/像这样:

公共类 SomeClass { 私有策略策略 = new DefaultStrategy(); 公共无效提供自定义策略(策略策略){ this.strategy = 策略; } }

这将确保松散耦合以及策略模式和 DI 的所有其他好处。同时,您不强制用户提供策略,用户可以决定为极端情况提供自定义策略等。如果您为构造函数提供策略,则可以通过构造函数注入实现相同的目标-范围。我认为这种实现将在许多情况下提供最大的灵活性。

【问题讨论】:

标签: design-patterns dependency-injection strategy-pattern


【解决方案1】:

这种方法的缺点是您与 DefaultStrategy 类存在永久耦合。如果这带来了任何重大负担,您将来可能会后悔。

另一种方法可能是使用某种后期绑定。因此,您没有默认策略,而是有默认策略的名称。在运行时,第一次使用时,我们查找名称并加载相应的类。现在我们可以选择通过调整名称类映射来控制策略。

这是 JEE 在 JNDI 中的资源查找启用的一种可能性。

【讨论】:

  • 好主意。我想如果没有提供自定义,您也可以对使用进行空检查并实例化默认策略。有点像惰性初始化。
【解决方案2】:

我认为要考虑的最重要的事情是,此实施是否最适合您的需求?我确实同意提供一个 setter(我会将名称更改为 setStrategy),但不利的一面是客户需要确切知道哪些策略可用。您可以向客户提供该信息的一种方法是通过包含每个可用策略的枚举。然后客户端可以根据需要“热交换”它们。

您可以在此处查看我的示例代码:www.jasonsjavadocs.com/XHTML/DesignPatterns.html,在“策略”部分下。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-05
    • 1970-01-01
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多