[英]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.