簡體   English   中英

哪種設計模式最合適?

[英]Which design pattern is most appropriate?

我想創建一個可以使用四種算法之一的類(並且使用的算法僅在運行時才知道)。 我認為策略設計模式聽起來合適,但我的問題是每個算法需要稍微不同的參數。 使用策略是不是一個糟糕的設計,但是將相關參數傳遞給構造函數?

這是一個例子(為簡單起見,假設只有兩種可能的算法)......

class Foo
{
private:
   // At run-time the correct algorithm is used, e.g. a = new Algorithm1(1);
   AlgorithmInterface* a; 

};

class AlgorithmInterface
{
public:
   virtual void DoSomething() = 0;
};

class Algorithm1 : public AlgorithmInterface
{
public:
   Algorithm1( int i ) : value(i) {}
   virtual void DoSomething(){ // Does something with int value };
   int value;   
};

class Algorithm2 : public AlgorithmInterface
{
public:
   Algorithm2( bool b ) : value(b) {}
   virtual void DoSomething(){ // Do something with bool value };
   bool value;   
};

這將是一個有效的設計,因為策略模式要求定義接口,並且任何實現它的類都是運行策略代碼的有效候選者,無論它是如何構造的。

我認為這是正確的,如果您在創建新策略時擁有所需的所有參數,那么您所做的工作對於每個閱讀代碼的人來說都很清楚。

你對這種方法是正確的。 是的,這是戰略模式的本質...... “改變算法獨立於實施。” 您可以給自己一個通用構造函數來傳遞初始化類所需的參數,例如對象數組。

請享用!

當您想要決定運行時使用哪種算法時,策略模式很有用。

您還可以使用包含鍵值對的內存塊的單個接口傳遞參數。 這樣,接口在任何現有和未來算法之間是通用的。 每個算法實現都知道如何將鍵值對解碼為其參數。

恕我直言,您正面臨着挑戰,因為您在具體算法的創建方面與算法的實際運行之間感到困惑。 只要'DoSomething'界面保持不變,就可以使用Strategy Pattern 只有不同具體算法的創建在您的情況下會有所不同,可以通過Factory Method設計模式來處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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