Ecco il mio problema:
Ho una struttura di classe come questa:
class Base
{
private:
SomeType something;
bool isSomeValue;
public:
virtual void myMethod() = 0;
};
class Child1 : public Base
{
virtual void myMethod() override
{
// do step 1
for (int i = 0; i < something.size(); ++i)
{
// do step 2
if (isSomeValue)
{
// do step 3
}
}
// do step 4
}
};
class Child2 : public Base
{
virtual void myMethod() override
{
// do step 1
for (int i = something.size() - 1; i >= 0; --i)
{
// do step 2
if (isSomeValue)
{
// do step 3
}
}
// do step 4
}
};
class Child3 : public Base
{
virtual void myMethod() override
{
// do step 1
for (int i = 0; i < something.size(); ++i)
{
// do step 2
if (isSomeValue)
{
// do step 3
}
else
{
break;
}
}
// do step 4
}
};
Come puoi vedere in Child2 e Child3 differiscono da Child1 come in Child2 il ciclo sta passando dalla direzione opposta e in Child3 c'è anche else con break istruzioni. Spero tu sia d'accordo sul fatto che questi algoritmi differiscono solo leggermente e faccio quasi copia del codice. Esiste un approccio migliore a strutture simili per non scrivere codice simile in molti luoghi diversi?
Ecco principio ASCIUTTO che voglio usare anche se non eseguo la copia del codice, solo scrivere simili codice. Ho appena visto un costrutto simile in diverse classi. Potrebbe Modello metodo modello utilizzato in modo intelligente per eliminare il codice simile? O qualsiasi altro approccio?