Modèles de comportement - mode d'état

Mode État

état Mode (Pattern Etat), le comportement de la classe est basée sur son changement d'état.

introduction

Intention: permet à l'objet de changer son comportement lorsque l'état interne est modifié, l'objet semble modifier sa classe.

La principale solution: le comportement d'un objet dépend de son état (propriété), et peut être modifiée pour modifier son comportement en fonction de son état associé.

Quand utiliser: le code contient un certain nombre de déclarations conditionnelles au sujet de l'état de l'objet.

Comment résoudre: la variété des résumés de classe d'état spécifique.

Le code clé: une seule interface de manière sont généralement le mode de commande. Alors que l' un ou plusieurs du mode d'état d'interface. En outre, la méthode de classe mode d'état de mise en œuvre, généralement la valeur de retour, ou modifier la valeur de la variable d'instance. En d' autres termes, l'état et l'état du modèle d'objet est généralement lié. La méthode de la classe de mise en œuvre ont des fonctions différentes, un procédé de recouvrement de l'interface. Mode Etat et le mode de commande le même peut également être utilisé pour éliminer d' autres conditions if ... else déclaration de sélection.

Exemples d'application:  1, les athlètes de basket - ball de jeu ont le statut d'état normal, anormal et extraordinaire. 2, Bianzhong, « l' horloge est l'interface abstraite », « Horloge A » et autres sont spécifiquement état, « environnement spécifique » Bianzhong (contexte).

Avantages:  1, le paquet de règles de conversion. 2, énumérer les états possibles, doivent déterminer le statut des espèces dans l'état avant l'énumération. 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, permet à l'état logique de transition de l' état de l'objet dans l' un, au lieu d'un énorme bloc de déclaration conditionnelle. 5, l'environnement permet de multiples objets partagent un objet d'état, ce qui réduit le nombre d'objets dans le système.

Inconvénients:  1, en utilisant les systèmes de modèle d'Etat augmente inévitablement le nombre de classes et d' objets. 2, la structure et la mise en œuvre du modèle de l' État sont plus complexes, si elles sont utilisées de façon incorrecte se traduira par des structures de confusion et le code du programme. 3, le support du mode d'Etat pour « principe d' ouverture et de fermeture » est pas très bon pour l'état du mode peut être états de commutation, l' ajout de nouvelles classes doivent modifier le statut du code source des responsables des transitions d'état, ou ne peut pas passer au nouvel état, et modifier un état de comportement de la classe correspondant à la classe aussi besoin de modifier le code source.

Les scénarios d'utilisation:  1, en fonction de l'état d' un changement de comportement et le changement de scène. 2, état, plutôt que par l'instruction switch.

Remarque: Utilisez le mode d'état lorsque le comportement de contrainte par l'État, et l'État pas plus de cinq.

réalisation

Nous allons créer un  Etat  interface et la mise en œuvre de l'  Etat  interface de classe de l' Etat de l' entité. Contexte  est une classe avec un état.

StatePatternDemo , nos cours de démonstration utilisent  Contexte des  objets et de l' État pour démontrer les changements de comportement dans le changement d'état du contexte.

 

 1, pour créer une interface

publique  Interface Etat { 

    publique  vide doAction (contexte de contexte); 
}

2. Créez une classe qui implémente l'entité d'interface

publique  classe StartState outils Etat { 

    @Override 
    publique  vide doAction (contexte de contexte) { 
        System.out.println ( « Le lecteur est en phase de démarrage » ); 
        context.setState ( ce ); 
    } 

    @Override 
    publique String toString () {
         retour "État de départ" ; 
    } 
}
publique  classe StopState outils Etat { 

    @Override 
    publique  vide doAction (contexte de contexte) { 
        System.out.println ( « Le lecteur est en état d'arrêt » ); 
        context.setState ( ce ); 
    } 

    @Override 
    publique String toString () {
         retour "Etat Stop" ; 
    } 
}

3. Créer une classe de contexte

publique  classe Contexte {
     privé de l' Etat de l' Etat; 

    publique Contexte () { 
    } 

    publics  vides setState (état Etat) {
         ce .state = état; 
    } 

    Publique Etat getState () {
         retour Etat; 
    } 
}

4. Utiliser le contexte pour voir les changements de comportement lorsque l'état a changé l'État

publique  classe StatePatternDemo {
     publics  statiques  vides principaux (String [] args) { 
        Contexte contexte = nouveau contexte (); 

        StartState startState = nouveau StartState (); 
        startState.doAction (contexte); 
        System.out.println (context.getState ()); 

        StopState stopState = nouveau StopState (); 
        stopState.doAction (contexte); 
        System.out.println (context.getState ()); 
    } 
}

Etat Lorsque les changements d'état, les méthodes toString de l'objet a changé.

exportation

 

 

Référence: https://www.runoob.com/design-pattern/state-pattern.html

Je suppose que tu aimes

Origine www.cnblogs.com/hoo334/p/12522547.html
conseillé
Classement