[英]Strategy pattern executing two or more algorithms
谁能让我举一个不使用一种算法,而是依次使用两种或多种算法的策略模式的例子?
也许我要在列表中插入这些算法,然后使用a执行该列表中的所有算法?
此列表必须是上下文类的公共属性吗?
拜托,任何人都可以让我成为伪代码示例吗?
您可以实施一种策略,该策略以特定顺序调用所有算法。 我的示例与策略模式中描述的类链接:
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);
}
如您所见,我们只能执行新的“复杂策略”。 模式自己保持不变。
您可能只是将策略的实现与两个按顺序执行的策略实例组合在一起,对吗?
尽管我无法想到这种情况会有用。
究竟您想做什么不清楚。
**根据您在下面的评论**
我认为策略模式在这里不合适,因为您总是在做固定的事情,应用您所拥有的噪声滤波器的所有实现,并且策略模式是在不同方法之间进行选择。 您只有1个策略!
我会将其实现为处理管道。 首先按照要应用的顺序创建具有所有已知算法的管道。 在run方法中,调用管道,该管道又依次调用每个算法。 当系统引发新事件以说有新处理器可用时,请将其添加到管道中。
编辑2
如果具有run方法的对象是模式中的主题,并且添加新处理器时,可以调用addsubscriber方法将处理器添加到列表中,则可以使用观察者模式(虽然不是很合适的恕我直言)来实现它。 然后,在调用run时,您将迭代订阅者列表,并将修改后的声音传递给他们。
但这对我来说是种种错误。
听起来您的任务要达到的目的是,您需要一些外部代码(也许是控制器),这些代码必须在运行时决定使用哪种方法来处理某些事情。 通常,这是通过策略完成的:处理程序都是策略的所有实现(在Java中,这是一个接口),然后您可以将其保存在地图中,然后根据类似地图类型的内容来分配适当的地图传入请求,也可以将它们放在列表中并遍历它们,找到合适的请求。
如果您让每个人都只是在处理信息上有所分歧,那么您就有责任链。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.