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?