Este artículo describe la función de conmutación de modo de edición de documentos implementada por Java basada en el modo de estado. Compártelo para su referencia, como sigue:
Una definición de patrón
Modo de estado: cuando cambia el estado interno de un objeto, permite cambiar su comportamiento, y el objeto parece que ha cambiado su clase.
Ejemplos del segundo modo
1 análisis de patrones
Utilizamos el caso del modo de edición de documentos para cambiar para ilustrar este modo.
2 Diagrama de clase estática en modo estático
3 ejemplos de código
3.1 Crear una interfaz de estado
paquete com.demo.state; import com.demo.context.context;/** * * estatal interfaz * * @author * */pública interface istate {/** * state transition * * @param context * @param mode */public void convertstate (contexto context, intdo int); / ** * Guardar método * * @param context */ public void save (contexto de contexto); / ** * Modificar el método * * @param context */ public void Modify (contexto del contexto); / ** * nuevo método * * @param context */ public void add (contexto de contexto); / ** * Ver método * * @param context */ public void View (contexto de contexto);}3.2 Crear un contexto contexto
paquete com.demo.context; import com.demo.state.istate;/** * entorno de contexto * * @author * */public class context {// Preview Mode public static final int preview_mode = 0; // Modo de edición public static final int edit_mode = 1; // Estado actual de estado privado estado; // Cambiar el estado público void cambiante (estado istate) {this.state = state; } / ** * ejecutar * @param modo * / public void dowork (int-mods) {System.out.println ("---------------------------------"); this.state.ConvertState (this, modo); this.state.add (this); this.state.save (this); this.state.modify (this); this.state.view (this); System.out.println("--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------3.3 EDIT Status 1 EditState
paquete com.demo.state; import com.demo.context.context;/*** Mode de edición Estado** @author**/public class EditState implementa Istate {/*** State Transition*/public void ConvertState (context, int Mode) {if (mode == context.preview_mode) {context.changestate (new valewstate (new ViewState () (if); }} / *** Nuevo en modo de edición* / public void add (contexto context) {System.out.println ("Modo de edición [Agregar] ..."); } / *** Modificación del modo de edición* / public void modify (contexto context) {system.out.println ("Modo de edición [modificar] ..."); } / *** Modo de edición Guardar* / public void save (contexto context) {System.out.println ("Modo de edición [Guardar] ..."); } / *** Vista de modo de edición* / View public void (contexto de contexto) {System.out.println ("Modo de edición [Ver] ..."); }}3.4 Previewstate
paquete com.demo.state; import com.demo.context.context;/*** Status de modo de vista previa** @author**/public class PreviewState implementa Istate {/*** State Transition*/public void Convertate (context, int Mode) {if (mode == context.edit_mode) {context.changestate (new editState (); }} / *** Nuevo en modo de vista previa* / public void add (contexto context) {system.out.println ("El modo de vista previa no admite la función [nueva]!"); } / *** Modificación del modo de vista previa* / public void modify (contexto context) {system.out.println ("El modo de vista previa no admite la función [modificar]!"); } / *** Guardar en modo de vista previa* / public void save (contexto context) {system.out.println ("El modo de vista previa no admite la función [guardado]!"); } / *** Vista de modo de vista previa* / Public void View (contexto de contexto) {System.out.println ("Modo de vista previa [Ver] ..."); }}3.5 Cliente de prueba del cliente
paquete com.demo; import java.util.random; import com.demo.context.context; import com.demo.state.editstate;/** * Client aplicación * * @author * */public class Client {/** * @param args */public static void main (string [] args) {contexto context = new contexter (); context.ChangeState (nuevo editState ()); Aleatorio aleatorio = new Random (); for (int i = 0; i <5; i ++) {int r = random.nextint (2); System.out.println ("Modo actual:" + (r == 0? "Modo de vista previa": (r == 1? "Modo de edición": "")); context.dowork (r); }}}4 Resultados de ejecución
Modo actual: modo de edición
---------------------------------------------------------------------------------------------------
Modo de edición [nuevo] ...
Modo de edición [Guardar] ...
Modo de edición [modificar] ...
Modo de edición [Ver] ...
---------------------------------------------------------------------------------------------------
Modo actual: modo de edición
---------------------------------------------------------------------------------------------------
Modo de edición [nuevo] ...
Modo de edición [Guardar] ...
Modo de edición [modificar] ...
Modo de edición [Ver] ...
---------------------------------------------------------------------------------------------------
Modo actual: modo de vista previa
---------------------------------------------------------------------------------------------------
¡El modo de vista previa no admite la función [nueva]!
¡El modo de vista previa no admite la función [Guardar]!
¡El modo de vista previa no admite la función [modificar]!
Modo de vista previa [Ver] ...
---------------------------------------------------------------------------------------------------
Modo actual: modo de vista previa
---------------------------------------------------------------------------------------------------
¡El modo de vista previa no admite la función [nueva]!
¡El modo de vista previa no admite la función [Guardar]!
¡El modo de vista previa no admite la función [modificar]!
Modo de vista previa [Ver] ...
---------------------------------------------------------------------------------------------------
Modo actual: modo de edición
---------------------------------------------------------------------------------------------------
Modo de edición [nuevo] ...
Modo de edición [Guardar] ...
Modo de edición [modificar] ...
Modo de edición [Ver] ...
---------------------------------------------------------------------------------------------------
Tres principios de diseño de este patrón
Principio de 1 "cierre abierto"
2 Principio de responsabilidad única
Cuatro ocasiones de uso
1 El comportamiento de un objeto se toma de su estado, y debe cambiar su comportamiento de acuerdo con su estado en el momento de la operación.
2 Una operación contiene una enorme estructura de múltiples ramos, y estas ramas están determinadas por el estado del objeto.
Diagrama de clase estática en modo de cinco estados
Para obtener más contenido relacionado con Java, los lectores interesados en este sitio pueden ver los temas: "Introducción y tutorial avanzado sobre la programación orientada a objetos de Java", "Tutorial sobre la estructura de datos de Java y el algoritmo", "Resumen de la operación de Java DOM Node Node", "Summary of Java File and Directory Operation Skilly" y "Summary of Java Cache Skitch" Habilidades "
Espero que este artículo sea útil para la programación Java de todos.