Chcę utworzyć klasę, która może korzystać z jednego z czterech algorytmów (a używany algorytm jest znany tylko w czasie wykonywania). Myślałem, że wzór strategii jest odpowiedni, ale moim problemem jest to, że każdy algorytm wymaga nieco innych parametrów. Czy używanie strategii byłoby złym pomysłem, ale przekazanie odpowiednich parametrów do konstruktora ?.Który wzór jest najbardziej odpowiedni?
Oto przykład (dla uproszczenia załóżmy, że istnieją tylko dwie możliwe algorytmy) ...
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;
};
Zamiast próbować dopasować kod do jakiegoś założonego schematu, po prostu zaprojektuj go, który jest dla ciebie najwyraźniejszy (i, miejmy nadzieję, najwyraźniejszy dla wszystkich innych) i najłatwiejszy w utrzymaniu. Innymi słowy: wzorce ssania. Jeśli * ty * znalazłeś elegancki sposób rozwiązania problemu, użyj go; To, czy narusza jakiś arbitralny wzorzec projektu, jest nieistotne. – GManNickG
Ponadto, jeśli podasz nam trochę więcej (w jaki sposób przekazywane są te parametry itp.), Możemy dać ci lepszą odpowiedź. Ale tak jak się wydaje, wygląda mi to na świetne rozwiązanie. – GManNickG