2011-11-25 77 views
9

有時,當使用策略模式時,我發現某些算法實現不需要相同的參數列表。策略模式中的變化參數

例如

public interface Strategy{ 
    public void algorithm(int num); 
    } 

    public class StrategyImpl1 implements Strategy{ 
    public void algorithm(int num){ 
     //num is needed in this implementation to run algorithm 
    } 
    } 

    public class StrategyImpl2 implements Strategy{ 
    public void algorithm(int num){ 
     //num is not needed in this implementation to run algorithm but because im using same 
     strategy interface I need to pass in parameter 
    } 

} 

有沒有我應該使用不同的設計模式?

回答

9

這通常是可以接受的,雖然如果只有某些實現需要參數,也許將這些參數提供給實現的構造函數會更有意義(即將它們留在策略接口之外),但這可能不會成爲你的情況的一個選擇。

此外,另一種選擇是製作一個Parameters類,並讓您的策略方法簡單地採取其中之一。這個類然後可以有各種參數的獲得者(即int num),如果一個特定的實現不需要使用num那麼它就不會調用parameters.getNum()。這也使您可以靈活地添加新參數,而無需更改任何現有的策略實施或接口。

就是這樣說,像Parameters這樣的類讓我覺得在其他地方出現了抽象失敗的情況,儘管有時候你只能讓它工作。