具有默认策略的策略模式

时间:2011-08-04 06:10:02

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

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

public class SomeClass {

    private Strategy strategy = new DefaultStrategy();

    public void provideCustomStrategy(Strategy strategy) {
        this.strategy = strategy;
    }
}

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

2 个答案:

答案 0 :(得分:1)

这种方法的缺点是你与DefaultStrategy类有永久的耦合。如果这带来了任何重要的包袱,你可能会在将来后悔。

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

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

答案 1 :(得分:0)

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

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