Quiero crear una clase que pueda usar uno de los cuatro algoritmos (y el algoritmo a usar solo se conoce en tiempo de ejecución). Estaba pensando que el patrón de diseño de la estrategia parece apropiado, pero mi problema es que cada algoritmo requiere parámetros ligeramente diferentes. ¿Sería un mal diseño usar la estrategia, pero pasar los parámetros relevantes al constructor ?.¿Qué patrón de diseño es el más apropiado?
Aquí es un ejemplo (para simplificar, digamos que sólo hay dos algoritmos posibles) ...
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;
};
En lugar de tratar de ajustar el código en algún patrón presupuesta, sólo el diseño que eso es más claro a usted (y es de esperar más clara a todos los demás) y más fácil de mantener. En otras palabras: los patrones de diseño apestan. Si * usted * encuentra una forma elegante de resolver un problema, úselo; si viola o no un patrón de diseño arbitrario es irrelevante. – GManNickG
Además, si nos da un poco más (cómo se pasan estos parámetros, etc.) podemos darle una mejor respuesta. Pero al igual que parece, parece una buena solución para mí. – GManNickG