任何人都可以为我提供一个策略模式的示例吗?该策略模式不是使用一种算法,而是依次使用两种或多种算法?
也许我需要将这些算法插入到列表中,然后使用 for 执行该列表中的所有算法?
该列表必须是上下文类的公共(public)属性吗?
请问谁能给我一个伪代码示例吗?
最佳答案
您可以实现一个策略,以特定顺序调用所有算法。我的示例与 Strategy pattern 中描述的类链接。 :
class MultiAlgorithm implements Strategy {
private Strategy[] strategies;
public MultiAlgorithm(Strategy... strategies) {
if (strategies == null || strategies.length == 0) {
throw new IllegalArgumentException(
"Algorithms collection cann't be null!");
}
this.strategies = strategies;
}
@Override
public int execute(int a, int b) {
System.out.println("Called MultiAlgorithm's execute()");
int result = 0;
for (Strategy strategy : strategies) {
result += strategy.execute(a, b);
}
return result;
}
}
使用示例
public static void main(String[] args) throws Exception {
Context context = new Context(new MultiAlgorithm(new Add(),
new Multiply(), new Subtract()));
int result = context.executeStrategy(1, 2);
System.out.println(result);
}
如你所见,我们必须只实现新的“复杂策略”。模式本人保持不变。
关于java - 执行两个或多个算法的策略模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14542165/