问题描述
public interface SearchAlgo { public Items search(); }
public class FirstSearchAlgo implements SearchAlgo { public Items search() {...} }
public class SecondSearchAlgo implements SearchAlgo { public Items search() {...} }
我还有一个工厂可以根据客户的输入创建上述具体类的实例。以下 SearchAlgoFactory
代码仅用于上下文。
public class SearchAlgoFactory {
...
public SearchAlgo getSearchInstance(String arg) {
if (arg == "First") return new FirstSearchAlgo();
if (arg == "Second") return new SecondSearchAlgo();
}
}
public class Manager{
public Items execute(String arg) {
SearchAlgo algo = SearchAlgoFactory.getSearchInstance(arg);
return algo.search();
}
}
问题:
我觉得我同时使用了工厂模式和策略模式,但我不确定,因为我看到的任何例子都有一个 Context
类来执行策略,客户端提供了他们想要使用的策略.那么,这是战略的正确实施吗?
解决方法
如果要实现设计模式,理解它们的作用比遵循一些黄金标准参考实现要重要得多。看起来您了解策略模式。
关于策略的重要一点是,实现是一些客户端代码(通常称为上下文)的外部,并且可以在运行时更改。这可以通过让用户直接提供策略对象来实现。然而,通过你的工厂引入另一个级别的间接也是可行的。您的 Manager
类充当您在大多数 UML 图中看到的上下文。
所以,是的。在我看来,您的代码实现了策略模式。