簡體   English   中英

執行兩個或多個算法的策略模式

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM