Какой шаблон разработки является самым соответствующим?

Я хочу создать класс, который может использовать один из четырех алгоритмов (и алгоритм для использования только известен во времени выполнения). Я думал, что шаблон разработки Стратегии звучит соответствующим, но моя проблема состоит в том, что каждый алгоритм требует немного отличающихся параметров. Это был бы плохой дизайн для использования стратегии, но передачи в соответствующих параметрах в конструктора?.

Вот пример (для простоты, скажем, существует только два возможных алгоритма)...

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;   
};
6
задан Matthieu M. 3 June 2010 в 06:38
поделиться

4 ответа

Это был бы допустимый дизайн, потому что шаблон Стратегия требует определения интерфейса, и любой класс, который его реализует, является допустимым кандидатом для запуска кода стратегии, независимо от как это устроено.

7
ответ дан 9 December 2019 в 20:40
поделиться

Вы правы в этом подходе. Да, в этом суть шаблона стратегии ... «Изменяйте алгоритм независимо от реализации». Вы можете просто дать себе общий конструктор для передачи параметров, необходимых для инициализации вашего класса, таких как массив объектов.

Наслаждайтесь!

2
ответ дан 9 December 2019 в 20:40
поделиться

Вы также можете передавать параметры, используя единственный интерфейс блока памяти, содержащего пары ключ-значение. Таким образом, интерфейс является общим между любыми настоящими и будущими алгоритмами. Каждая реализация алгоритма будет знать, как декодировать пары ключ-значение в свои параметры.

0
ответ дан 9 December 2019 в 20:40
поделиться

Я думаю, это правильно, если у вас есть все параметры, которые вам нужны при создании новой стратегии, и то, что вы делаете, будет ясно для всех, кто читает код.

2
ответ дан 9 December 2019 в 20:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: