在设计模式方面,我是一个初学者。关于实施战略模式的任何想法/像这样:
public class SomeClass { private Strategy strategy = new DefaultStrategy(); public void provideCustomStrategy(Strategy strategy) { this.strategy = strategy; } }
这将确保松散耦合以及策略模式和DI的所有其他好处。同时,您不会强制用户提供策略,并且用户可以决定为角落案例等提供自定义策略。如果您为构造函数提供策略,则可以使用构造函数注入实现相同的目标-参数。我认为这种实现在很多情况下会提供最大的灵活性。
答案 0 :(得分:1)
这种方法的缺点是你与DefaultStrategy类有永久的耦合。如果这带来了任何重要的包袱,你可能会在将来后悔。
另一种选择可能是使用某种后期绑定。因此,您没有默认策略,而是拥有默认策略的名称。在运行时,在第一次使用时,我们查找名称加载相应的类。现在我们可以选择通过调整名称类映射来控制策略。
这是JEE在JNDI中查找资源的一种可能性。
答案 1 :(得分:0)
我认为最重要的是要考虑这个实施最适合您的需求吗?我同意提供一个setter(我会将名称更改为setStrategy),但一方面就是客户需要确切知道哪些策略可用。向客户提供该信息的一种方法是通过包含每个可用策略的枚举。然后客户端可以根据需要“热插拔”它们。
您可以在此处查看我的示例代码:www.jasonsjavadocs.com/XHTML/DesignPatterns.html,位于“策略”部分。