Come riutilizzare una macchina a stati in un modo leggermente diverso?

3

Problema

Ho una grande macchina a stati. I requisiti di progettazione del progetto sono cambiati in modo tale che ho bisogno di riutilizzare questa macchina a stati in un altro posto. Tutti gli stati rimangono gli stessi in questo nuovo posto, ma alcuni stati eseguono cose leggermente diverse. Quale modello di progettazione mi consente di riutilizzare questa macchina a stati?

Motivazione

Sto costruendo un video player. È modellato da una macchina a stati con questi stati: fermati, caricati, riprodotti, in pausa, arrestati e altri ancora ... Questo video player deve essere utilizzato su due pagine Web. Quando il giocatore si blocca sulla prima pagina, dovrebbe mostrare un messaggio di errore qui sotto. Se il giocatore si blocca sulla seconda pagina, il messaggio di errore dovrebbe apparire al centro del video e pulsare alcune volte.

    
posta JoJo 06.07.2012 - 22:11
fonte

2 risposte

1

Il concetto di base è quello di astrarre ciò che varia. Quindi, se hai uno stato che fa FOO a senso unico nel luogo A e FOO in modo diverso nel posto B, estrai FOO in diverse strategie:

FooAStrategy fa ciò di cui A ha bisogno. È invocato chiamando doFoo, o esegui, o qualcosa del genere. FooStrategy fa ciò di cui il posto B ha bisogno. Viene richiamato chiamando doFoo, o esegui, o qualcosa del genere.

Il FooState nel posto A avrebbe una FooAStrategy. FooState sul posto B avrebbe una FooStrategia.

Ciascuno invocerebbe la sua strategia come necessario.

Nel caso in cui non avessi indovinato, questo è il modello di strategia .

    
risposta data 07.07.2012 - 05:37
fonte
0

personalmente, vorrei che le modifiche di stato chiamassero un metodo basato su un'interfaccia - in questo modo puoi collegare qualsiasi modello compatibile al suo interno

come per il tuo esempio specifico, potresti creare una sottoclasse del codice del video player e sovrascrivere il metodo dello stato "Crash" per fornire comportamenti diversi

    
risposta data 08.07.2012 - 22:43
fonte

Leggi altre domande sui tag