Immagina, ho classe IAlgo che è un'interfaccia. Ne ho ricavato e ho implementato il suo unico metodo chiamato matchCount in diverse implementazioni: AlgoA1 , AlgoA2 , AlgoA3 , AlgoB1 , AlgoB2 .
class IAlgo
{
virtual int matchCount(T1* p1, T2* p2) = 0;
}
class AlgoA1 : public IAlgo
{
virtual int matchCount(T1* p1, T2* p2) override
{
// impl here
}
}
La differenza tra AlgoAN e AlgoBK è che la categoria A è interessata a tutti i parametri di matchCount e la categoria B è interessata solo al primo param e il resto può essere nullo - categoria B non li usa.
Quindi, come algoritmo incapsulato, li sto usando nel modello di strategia. Dopo qualche tempo, il proprietario del prodotto dice che desidera un nuovo tipo di algoritmi ( AlgoC category) che aggiunge un nuovo parametro al metodo matchCount - ad esempio T3* . Quindi dovremmo tornare indietro e modificare l'intera gerarchia di IAlgo e tutte le sottoclassi avranno il seguente formato:
virtual int matchCount(T1* p1, T2* p2, T3* p3) = 0;
Questo è un problema di progettazione e sembra che io abbia avuto un algoritmo incapsulato per usarlo come strategia, ma non ha funzionato. Come devo risolvere questo problema? Il mio problema è il fatto che le famiglie AlgoA , AlgoB e AlgoC non sono correlate e non dovrebbero derivare da IAlgo e non hanno una relazione "IS A"? Devo avere interfacce diverse IAlgoA , IAlgoB e IAlgoC per famiglie diverse? O tutto questo va bene e ho bisogno di qualche altra soluzione?
