Come implementare il modello di strategia per i comportamenti combinati

2

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)

    
posta JorgeDLuffy 02.05.2018 - 19:24
fonte

2 risposte

1

Penso che il problema sia nel nome. Chiamarlo RedBlueShineStrategy è troppo specifico. Forse MultiColorShineStrategy funziona meglio, perché hai a che fare con l' astrazione di più colori. Questo potrebbe richiedere un array o dei colori e li fa risplendere tutti.

Quindi suppongo che la combinazione del modello di strategia con lo schema di composizione funzionerebbe.

    
risposta data 02.05.2018 - 23:42
fonte
0

Penso che lo schema che desideri sia Visitor. In sostanza, hai bisogno di qualcosa per operare su un aggregato. Così. Se hai una gerarchia o una collezione di cose, chiedi a ShineVisitor di visitare il tuo aggregato. Ciò ti consentirà di evidenziare i filtri, ad esempio.

    
risposta data 03.05.2018 - 01:55
fonte

Leggi altre domande sui tag