Il modello strategico risolve la necessità di applicare un determinato algoritmo / comportamento in base al tipo dell'oggetto stesso. Quindi puoi scorrere su un gruppo di oggetti simili e chiamare la stessa funzione aspettando che vengano eseguiti algoritmi diversi per ognuno di essi.
Ma per quanto riguarda due (o più) oggetti potrebbe avere un algoritmo speciale per loro insieme? Solo se entrambi sono nella nostra lista per iterare. In caso contrario, hanno il loro comportamento a oggetto singolo.
Esempio:
Abbiamo diversi tipi di oggetto: blu, giallo e rosso.
Hanno tutti il loro metodo shine()
, che implementa dalla propria strategia: BlueShineStrategy
, YellowShineStrategy
e RedShineStrategy
.
Allora ho una combinazione di Blue
e Yellow
oggetti. Per farli brillare, lo farò:
combination = [blueObject, yellowObject]
for c in combination:
c.shine()
Va bene. Il problema arriva quando viene aggiunta una restrizione. Se Red e Blue sono presenti nella combinazione, non posso chiamare il metodo shine per tutti, devo usare, solo per questi due, un RedBlueShineStrategy
.
Quando è il momento di chiedere e decidere l'uso delle strategie combinate? È nel momento dell'esecuzione (il for
momento)?
O dovrei decidere prima? (considerando che posso modellare le combinazioni, posso avere una serie di "gruppi speciali" inclusi nel modello)