Latest web development tutorials

motif d'État

Dans le mode d'état (Motif de l'État), le comportement de la classe est basée sur son statut a changé. Ce type de modèles de conception appartiennent schémas comportementaux.

Dans le modèle de l'Etat, nous créons des objets et une variété d'états comportementaux ainsi que l'état de la représentation de l'objet de contexte objet change modifié.

introduction

Intention: Autorise un objet à modifier son comportement dans l'état interne est modifié, l'objet semble modifier sa classe.

Principalement pour résoudre: le comportement d'un objet dépend de son état (attributs), et vous pouvez le changer en fonction de son changement de comportement liés à l' État.

Quand utiliser: Code contient un grand nombre d'objets liés à l'état des instructions conditionnelles.

Comment fixer: le statut des classes spécifiques abstract out.

Le code clé: l'interface du mode de commande habituellement une seule méthode.L'état de l'interface qui a une ou plusieurs méthodes. En outre, la méthode de mode d'état de la classe de mise en œuvre, le plus souvent la valeur de retour, ou modifier la valeur d'une variable d'instance. Autrement dit, l'état et l'état du modèle d'objet est généralement pertinent. méthodes de classe de mise en œuvre ont des fonctions différentes, les méthodes d'interface couvertes. Mode Etat et le mode même de commande peuvent également être utilisés pour éliminer d'autres conditions si ... Déclaration de sélection d'autre.

Exemples d'application: 1, jouer joueur de basket peuvent avoir un état normal, pas l'état de l' état et anormal normal.2, marquis Yi de Zeng cloches, «l'horloge est interface abstraite ',' horloge A 'et autre état spécifique, environnement spécifique' Bianzhong '(Contexte).

Avantages: 1, encapsule les règles de transformation.2, énumérer les états possibles avant l'état d'énumération doit déterminer le statut des espèces. 3, tous avec un comportement lié à l'état dans une classe, et vous pouvez facilement ajouter un nouvel état, il suffit de changer l'état d'un objet peut changer le comportement des objets. 4, permettant à l'état de l'objet logique de transition d'état dans l'un, plutôt que d'un énorme bloc de déclarations conditionnelles. 5, permet à plusieurs objets partagent un environnement d'objet d'état, réduisant ainsi le nombre d'objets dans le système.

Inconvénients: 1, le motif de l' état d'utilisation est lié à augmenter le nombre de classes et d' objets système.2, la structure et la mise en œuvre du modèle de l'État sont plus complexes, si elle est utilisée de manière incorrecte peut provoquer la structure et le code de programme de confusion. 3, le soutien pour le modèle de l'Etat "principe Ouvert Fermé" est pas très bon, vous pouvez basculer l'état du modèle de l'État, en ajoutant de nouvelles classes ont besoin de modifier le statut des responsables de transitions d'état du code source, ou ne peut pas passer à l'état neuf, et de modifier une classe acte de l'Etat a également besoin de modifier le code source de la classe correspondante.

Scénarios d' utilisation:1, avec le changement des comportements et changement de scène Etat. 2, branchement conditionnel déclaration substitut.

Remarque: Lors de l' utilisation d' un comportement de l' État contraint par le mode de l' Etat, et l'Etat ne sont pas plus de cinq.

réalisation

Nous allons créer une interface de statut d'entité et de l'Étatde classe d'implémentation d' interfaceÉtat.Lecontexteest une classe avec un certain état.

StatePatternDemo,nous démontrons l'utilisation d'objetsContexteContexte classe et de statut pour démontrer le changement de comportement dans l'état de changement.

État motif diagramme UML

Etape 1

Créer une interface.

State.java

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

Etape 2

Créer classe d'entité qui implémente l'interface.

StartState.java

StartState public class implémente État {

   doAction public void (Context context) {
      System.out.println ( "Le lecteur est en état de départ");
      context.setState (this);	
   }

   public String toString () {
      retour "Etat Start";
   }
}

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";
   }
}

Etape 3

Créer classeContext.

Context.java

public class Contexte {
   Etat privé de l'Etat;

   Contexte du public () {
      state = null;
   }

   setState public void (état État) {
      this.state = état;		
   }

   publique d'Etat getState () {
      Etat de retour;
   }
}

Etape 4

Utilisezcontextepour voir le comportement lorsque l'état change change d'état.

StatePatternDemo.java

public class StatePatternDemo {
   main (String [] args) {public static void
      Contexte context = nouveau contexte ();

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

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

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

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

Etape 5

Vérifiez la sortie.

Le lecteur est en état de démarrage
État de démarrage
Le lecteur est en état d'arrêt
Etat d'arrêt