Latest web development tutorials

modello di Stato

Nella modalità di stato (state pattern), il comportamento della classe si riferiscono al suo stato cambiato. Questo tipo di modelli di progettazione appartengono modelli comportamentali.

Nel modello di stato, creiamo oggetti e una varietà di stati comportamentali insieme con lo stato dell'arte della rappresentazione dell'oggetto contesto modifiche degli oggetti modificati.

introduzione

Intento: Consente a un oggetto di modificare il suo comportamento nello stato interno è cambiato, l'oggetto appare di modificare la sua classe.

Principalmente da risolvere: il comportamento di un oggetto dipende dal suo stato (attributi), e si può cambiare in base alla sua legati stato il cambiamento di comportamento.

Quando utilizzare: Codice contiene un gran numero di oggetti relativi allo stato di istruzioni condizionali.

Come risolvere: lo stato di specifiche classi Abstract fuori.

Il codice chiave: l'interfaccia modalità di comando di solito un solo metodo.Lo stato dell'interfaccia che ha uno o più metodi. Inoltre, il metodo di modalità dello stato classe di implementazione, di solito il valore di ritorno, o cambiare il valore di una variabile di istanza. Cioè, lo stato e lo stato del modello a oggetti è generalmente rilevante. metodi di classe di implementazione hanno funzioni diverse, metodi di interfaccia coperti. Modalità Stato e modalità di comando lo stesso può essere utilizzato anche per eliminare le altre condizioni, se ... istruzione selezione altro.

Esempi di applicazione: 1, la riproduzione di giocatore di basket possono avere uno stato normale, non lo stato normale e anormale stato.2, Marchese Yi di Zeng campane, l' 'orologio è un'interfaccia astratta', 'orologio A' e altro stato specifico, ambiente specifico 'Bianzhong' (contesto).

Vantaggi: 1, incapsula le regole di trasformazione.2, enumerare gli stati possibili prima dello stato enumerazione deve determinare lo stato delle specie. 3, il tutto con un comportamento legati stato in una classe, e si può facilmente aggiungere nuovo stato, solo bisogno di cambiare lo stato di un oggetto in grado di modificare il comportamento degli oggetti. 4, consentendo lo stato stato logico transizione dell'oggetto in uno, piuttosto che una enorme blocco di istruzioni condizionali. 5, consente a più oggetti condividono un ambiente oggetto di stato, riducendo così il numero di oggetti nel sistema.

Svantaggi: 1, il modello stato d'uso è destinato ad aumentare il numero di classi e oggetti di sistema.2, la struttura e l'attuazione del modello di stato sono più complesse, se usato correttamente può causare struttura e codice di programma confusione. 3, il supporto per il modello di stato "Aperto Chiuso Principle" non è molto buona, è possibile passare lo stato del modello di stato, l'aggiunta di nuove classi necessità di modificare lo stato dei responsabili transizioni di stato del codice sorgente, o Non è possibile passare al nuovo stato, e modificare un atto di classe stato anche bisogno di modificare il codice sorgente della classe corrispondente.

scenari di utilizzo: 1, con il comportamento cambiamento di stato e cambio di scena.2, salto condizionato dichiarazione sostitutiva.

Nota: Quando si utilizza un comportamento stato costretto dalla modalità dello stato, e lo stato non è più di cinque.

realizzazione

Creeremo un Interfaccia di stato entità e l'attuazionedello Statodi classedello Stato.Il contesto è una classe con un certo stato.

StatePatternDemo,dimostriamo l'uso di classe e di stato oggettidi contestocontesto per dimostrare il cambiamento del comportamento nello stato di cambiamento.

modello diagramma UML Stato

fase 1

Creare un'interfaccia.

State.java

public interface State {
   public void doAction(Context context);
}

fase 2

Creare classe di entità che implementa l'interfaccia.

StartState.java

public class StartState implementa Stato {

   doAction public void (contesto Context) {
      System.out.println ( "Player è in stato iniziale");
      context.setState (questo);	
   }

   Public String toString () {
      ritorno "Start Stato";
   }
}

StopState.java

public class StopState implements State {

   public void doAction(Context context) {
      System.out.println("Player is in stop state");
      context.setState(this);	
   }

   public String toString(){
      return "Stop State";
   }
}

fase 3

Crea classeContext.

Context.java

public class Contesto {
   Stato stato privato;

   Contesto pubblico () {
      state = null;
   }

   setState public void (stato di stato) {
      this.state = Stato;		
   }

   pubblica Stato getState () {
      stato tornare;
   }
}

fase 4

UtilizzareContestodi vedere il comportamento quando lo stato cambia cambiastato.

StatePatternDemo.java

public class StatePatternDemo {
   Main (string [] args) {public static void
      Context context = nuovo contesto ();

      StartState startState = new StartState ();
      startState.doAction (contesto);

      System.out.println (context.getState () toString ().);

      StopState stopState = new StopState ();
      stopState.doAction (contesto);

      System.out.println (context.getState () toString ().);
   }
}

fase 5

Verifica uscita.

Player è in stato di avvio
Inizio di Stato
Player è in stato di arresto
arresto Stato