Cet article décrit la fonction de commutation de mode d'édition de document implémenté par Java en fonction du mode état. Partagez-le pour votre référence, comme suit:
Une définition de modèle
Mode d'état: lorsque l'état intérieur d'un objet change, il permet de modifier son comportement et l'objet semble avoir changé sa classe.
Exemples du deuxième mode
1 analyse de modèle
Nous utilisons le cas du mode d'édition de document pour changer pour illustrer ce mode.
2 Diagramme de classe statique en mode statique
3 exemples de code
3.1 Créer un interface d'état-Terte
package com.demo.state; import com.demo.context.context; / ** * * Interface d'état * * @author * * / interface publique Istate {/ ** * State Transition * * @param context * @param mode * / public void convertstate (context context, int mode); / ** * Méthode de sauvegarde * * @param Context * / public void Save (context context); / ** * Modifier la méthode * * @param context * / public void modify (contexte context); / ** * nouvelle méthode * * @param context * / public void add (context context); / ** * Voir la méthode * * @param Context * / public void View (contexte de contexte);}3.2 Créer un contexte de contexte
package com.demo.context; Importer com.demo.state.istate; / ** * Environnement de contexte * * @author * * / public class context {// aperview mode public static final int aponview_mode = 0; // Mode édition publique statique final int edit_mode = 1; // État actuel de l'état privé; // Modifier l'état public void changeState (Istate State) {this.state = state; } / ** * Run * @param mode * / public void Dowork (mode int) {System.out.println ("------------------------------"); this.state.convertState (this, mode); this.state.add (this); this.state.save (this); this.state.modify (this); this.state.view (this); System.out.println("--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------3.3 Modifier l'état 1 EditState
package com.demo.state; Importer com.demo.context.context; / ** * Modifier le mode État * * @author * * / public class editState implémente iState {/ ** * State Transition * / public void ConvertState (context context.changestate (if (mode == context.preview_mode) {context.changestate (new prewstate ()); }} / ** * Nouveau en mode édition * / public void add (context context) {System.out.println ("mode édition [add] ..."); } / ** * Modification du mode modification * / public void modify (context context) {System.out.println ("Modifier le mode [modifier] ..."); } / ** * Modifier le mode enregistrer * / public void Save (Context Context) {System.out.println ("Modifier le mode [enregistrer] ..."); } / ** * Modifier le mode View * / public void View (context context) {System.out.println ("Mode d'édition [View] ..."); }}3.4 Aperçu
package com.demo.state; Importer com.demo.context.context; / ** * Statut de mode de prévisualisation * * @Author * * / public class PreviewState implémente iState {/ ** * State Transition * / public void convertState (context context, int mode) {if (mode == context.edit_mode) {neft.changestate (new editState ()); }} / ** * Nouveau en mode prévisualisation * / public void add (context context) {System.out.println ("Le mode de prévisualisation ne prend pas en charge la [nouvelle] fonction!"); } / ** * Modification du mode d'aperçu * / public void modify (context context) {System.out.println ("Le mode de prévisualisation ne prend pas en charge la fonction [modification]!"); } / ** * MODE APPREEPTEMENT SAVIRE * / PUBLIC VOID SAVE (Context Context) {System.out.println ("Le mode de prévisualisation ne prend pas en charge la fonction [SAVING]!"); } / ** * Aperçu du mode View * / public void View (Context Context) {System.out.println ("Mode de prévisualisation [View] ..."); }}3.5 Client Testing Client
package com.demo; import java.util.random; import com.demo.context.context; import com.demo.state.editState; / ** * application client * * @author * * / public class Client {/ ** * @param args * / public static void Main (string [] args) {context (new Context ();); context.changestate (new EditState ()); Aléatoire aléatoire = nouveau aléatoire (); pour (int i = 0; i <5; i ++) {int r = random.nextint (2); System.out.println ("Mode actuel:" + (r == 0? "Mode d'aperçu": (r == 1? "Mode d'édition": ""))); context.dowork (R); }}}4 Résultats en cours d'exécution
Mode actuel: Mode d'édition
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Mode d'édition [Nouveau] ...
Modifier le mode [Enregistrer] ...
Mode d'édition [Modifier] ...
Modifier le mode [Voir] ...
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Mode actuel: Mode d'édition
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Mode d'édition [Nouveau] ...
Modifier le mode [Enregistrer] ...
Mode d'édition [Modifier] ...
Modifier le mode [Voir] ...
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Mode actuel: mode d'aperçu
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Le mode d'aperçu ne prend pas en charge la [nouvelle] fonction!
Le mode d'aperçu ne prend pas en charge la fonction [Enregistrer]!
Le mode d'aperçu ne prend pas en charge la fonction [modifier]!
Mode d'aperçu [Voir] ...
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Mode actuel: mode d'aperçu
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Le mode d'aperçu ne prend pas en charge la [nouvelle] fonction!
Le mode d'aperçu ne prend pas en charge la fonction [Enregistrer]!
Le mode d'aperçu ne prend pas en charge la fonction [modifier]!
Mode d'aperçu [Voir] ...
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Mode actuel: Mode d'édition
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Mode d'édition [Nouveau] ...
Modifier le mode [Enregistrer] ...
Mode d'édition [Modifier] ...
Modifier le mode [Voir] ...
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Trois principes de conception de ce modèle
1 principe "de clôture ouverte"
2 principe de responsabilité unique
Quatre occasions d'utilisation
1 Le comportement d'un objet est tiré de son état, et il doit changer son comportement en fonction de son état au moment du fonctionnement.
2 Une opération contient une énorme structure multi-branche, et ces branches sont déterminées par l'état de l'objet.
Diagramme de classe statique en mode cinq états
Pour plus de contenu lié à Java, les lecteurs qui sont intéressés par ce site peuvent afficher les sujets: "Introduction et tutoriel avancé sur la programmation Java Oriented Oriented", "Tutorial sur la structure de données Java et l'algorithme", "Résumé des compétences de l'opération Java Dom Dom", "Résumé des compétences de l'opération Java et de l'opération de répertoire" et "Résumé de Java Cache Skills"
J'espère que cet article sera utile à la programmation Java de tous.