1. Descripción general
Cuando hay múltiples estados para un objeto en el sistema, el estado puede convertirse entre ellos, y el objeto se comporta de manera diferente en diferentes estados. El modo de estado separa el estado de un objeto del objeto y lo encapsula en una clase de estado especial, para que el estado del objeto pueda cambiarse de manera flexible. El modo de estado es un modo de comportamiento de objeto.
2. Escenarios aplicables
Se utiliza para resolver el problema de encapsulación de múltiples transiciones de estado de objetos complejos en el sistema y los comportamientos bajo diferentes estados. En pocas palabras, es tratar con múltiples estados de objetos y sus conversiones mutuas.
Iii. Diagrama de clase UML
4. Participantes
1), AbstractState (clase de estado abstracta):
La clase de estado abstracta define los métodos abstractos de comportamiento en diferentes estados, y se implementan diferentes operaciones de comportamiento en subclases (diferentes subclases estatales).
2) Concretestate (subclase de estado que implementa el comportamiento en estados específicos):
Subclases de clases estatales abstractas, cada subclase implementa un comportamiento relacionado con una clase de estado del medio ambiente (contexto). Cada clase de estado específica corresponde a un estado específico del medio ambiente, y el comportamiento de diferentes estados específicos es diferente.
3) contexto (clase de entorno que posee objetos de estado):
Tener atributos estatales, debido a la diversidad del medio ambiente, puede tener diferentes estados y comportarse de manera diferente bajo diferentes estados. Mantenga una instancia de estado abstracta en la clase de entorno. Esta instancia define el estado del entorno actual (método setstate ()) y separa el comportamiento de estado específico y se completa con diferentes subclases de estado.
5. Aprendizaje del caso de uso
1. Clase estatal abstracta: state.java
/ *** Modo de estado del patrón de diseño Java* Clase estatal abstracta* @author [email protected]**/ public abstract class state {/ *** Método de resumen de comportamiento de estado, el estado específico de la subclase implementa una lógica de comportamiento diferente*/ público Void comportamiento (); }
2. Subclase de estado específico A: Concretestatea.java
/ ** * Subclase de estado específico A * @author [email protected] */ public class Concretestatatea extiende el estado {@Override public void comportamiento () {// Comportamiento comercial de estado a, y qué puede hacer cuando está en este estado // por ejemplo: el teléfono móvil puede hacer llamadas normalmente cuando no se debe a un sistema de pago. pago"); }}
3. Subclase estatal específico B: concretestateB.java
/ ** * Subclase estatal específico B * @author [email protected] * */ public class ConcretestateB extiende el estado {@Override public void comportamiento () {// Comportamiento comercial del estado B, y qué puede hacer cuando está en este estado // cuando el teléfono móvil está en el tiempo de arranque y el tiempo de inhalación, el sistema. llamadas "); }}
4. Clase de entorno con objetos de estado: context.java
/** * La clase de entorno/contexto <br/> * tiene un objeto de estado, y puede completar la transición entre los estados [los cambios de estado/conmutación se implementa en la clase de entorno] * @author [email protected] * */contexto de clase pública {// Mantener una referencia a un objeto de estado abstracto Estado privado Estado privado; / * * Simular los atributos de la tarifa de llamada telefónica del teléfono móvil <br/> * El estado del entorno es el siguiente: * 1>, cuando bill> = 0.00 $: cuando el estado es normal, aún puede hacer llamadas * 2>, cuando la factura <0.00 $: cuando se debe el teléfono, no puede hacer llamadas */doble factura privada; /*** Función de procesamiento del entorno, llamar a comportamiento de instancia de estado completa la lógica de negocios <br/>* Referencias a diferentes comportamientos en diferentes estados*/public void manejo () {checkState (); state.behavior (); }/*** Verifique el estado del entorno: los cambios/conmutación de estado se implementan en la clase de entorno*/private void checkstate () {if (bill> = 0.00) {setState (new Concretestatea ()); } else {setState (new ConcretestateB ()); }}/** * Establezca el método del estado del entorno <br/> *, el propósito es dejar que el estado del entorno sea controlado/conmutado por el entorno del sistema en sí, y los usuarios externos no necesitan preocuparse por el estado dentro del entorno * @param state */private void setstate (estado de estado) {this.state = state; } public Double GetBill () {Bill de retorno; } public void setBill (doble factura) {this.bill = bill; }}
5. Pruebe la clase de llamadas al cliente: Client.java
Cliente de clase pública {public static void main (string [] args) {context context = new context (); context.setBill (5.50); System.out.println ("Saldo de tarifa de llamada actual:" + context.getBill () + "$"); context.handle (); context.setBill (-1.50); System.out.println ("Saldo de tarifa de llamada actual:" + context.getBill () + "$"); context.handle (); context.setBill (50.00); System.out.println ("Saldo de tarifa de llamada actual:" + context.getBill () + "$"); context.handle (); }} 6. Resultados de la operación del programa:
Saldo de tarifa de llamada actual: 5.5 $
El saldo de la factura del teléfono actual se puede hacer normalmente cuando el teléfono no está inactivo debido al pago inicial: -1.5 $
El saldo de la tarifa del teléfono actual no puede hacer llamadas cuando el teléfono está fuera de servicio.
El teléfono puede hacer llamadas normalmente sin ningún pago inicial.
VI. Expandir
Hay dos implementaciones diferentes de conmutación de estado en el modo de estado
Método 1: El cambio/conmutación de estado se implementa en la clase de entorno. Como en el código de caso de uso anterior, el método checkState () en la clase de contexto.
/*** Verifique el estado del entorno: los cambios/conmutación de estado se implementan en la clase de entorno*/private void checkState () {if (bill> = 0.00) {setState (new Concretestatea ()); } else {setState (new ConcretestateB ()); }} Método 2: El cambio/conmutación de estado se implementa en una subclase de estado específica.
Los pasos de implementación son los siguientes:
1) Inicialice un objeto de instancia de estado en la clase de contexto de clase de entorno y pase el objeto de contexto del entorno como un parámetro constructor del estado de subclase a la instancia de subclase de estado específica.
Por ejemplo, en la clase de Java context.
// establece el estado inicial this.state = new Concretestatea (this);
2) En la clase de estado de subclase específica, de acuerdo con el objeto de contexto construido, la lógica comercial juzga el estado llamando al valor de la propiedad del objeto de contexto.
Por ejemplo, en la clase Concretestatea.Java, la subclase de estado específico:
/ ** * Subclase de estado específico A * @author [email protected] */ public class Concretestatea extiende el estado {contexto privado CTX; public Concretestatea (contexto context) {ctx = context; } @Override public void comportamiento () {// Comportamiento comercial del estado A, y qué puede hacer cuando está en este estado // Por ejemplo: el teléfono móvil puede hacer llamadas normalmente cuando no está inactiva debido al sistema de pago inicial.out.println ("El teléfono móvil puede hacer llamadas normalmente cuando no se realiza el pago"); checkState (); }/** * Compruebe si el estado debe convertirse <br/> * La conmutación de estado se implementa en la subclase de estado específica */private void checkstate () {if (ctx.getBill () <0.00) {ctx.setState (new ConcretateB (ctx)); }}}
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.