La strategia nel modello di strategia è sempre un'interfaccia? Che modello sarebbe quando la strategia è astratta?
La strategia nel modello di strategia è sempre un'interfaccia? Che modello sarebbe quando la strategia è astratta?
Is the strategy in the strategy pattern always an interface?
Dipende da cosa intendi per "interfaccia". Se intendi il significato standard di programmazione generale di "un'astrazione che nasconde i suoi dettagli" che viene utilizzato con parole come "User Interface (UI)", "Application Programming Interface (API)", "Application Binary Interface (ABI)", "Interfaccia di rete", "Interfaccia audio" e così via, quindi sì, è sempre un'interfaccia. Dopotutto, l'intero punto del modello di strategia.
Se intendi la specifica parola chiave Java / C♯ interface
, allora no, ovviamente no, dal momento che non esiste nemmeno nella stragrande maggioranza delle lingue.
What pattern would it be when the strategy is abstract?
Strategia.
Non viene menzionata la percentuale di% co_de nella pagina Modello di strategia di il deposito pattern Portland su Wiki di Ward , né è lì qualsiasi menzione nel "Gang of Four Book" ( Modelli di design: elementi del software orientato agli oggetti riutilizzabile di Erich Gamma, John Vlissides, Ralph Johnson e Richard Helm) .
Il modello di strategia è piuttosto ortogonale rispetto al costrutto specifico della lingua di un interface
. Il modello di strategia funziona perfettamente in lingue che non hanno una interface
o una parola chiave equivalente.
Questo è particolarmente vero per i linguaggi tipizzati dinamicamente come Python dove è inutile / priva di significato definire un'interfaccia come un costrutto; gli oggetti in quelle lingue hanno strutture dinamiche, quindi anche le interfacce di quegli oggetti sono dinamiche.
Nel caso di un linguaggio come C ++, la definizione di un'interfaccia si ottiene usando class
o struct
parole chiave; creando una classe / struct che dichiara solo le funzioni membro pure-virtual.
La strategia (come definita nel libro GoF) è un'interfaccia nel senso che definisce un'API: un modo comune per accedere a diverse implementazioni di ConcreteStrategy.
Il modo in cui implementate questa idea concettuale di un'interfaccia dipende interamente dal vostro linguaggio di programmazione. Ad esempio, Java ha un'interfaccia come costrutto linguistico separato, il C ++ no. In realtà il libro GoF ha un'implementazione C ++ di esempio che passa il tipo concreto dell'implementazione della strategia utilizzata come parametro del template, eliminando completamente un'interfaccia esplicita della strategia.
Il punto è che la scelta tra l'interfaccia e la classe astratta (se possibile) è un dettaglio di implementazione. Non influisce in alcun modo sul modello della strategia.
Leggi altre domande sui tag interfaces design-patterns abstract-class strategy