1. Visão geral
Quando existem vários estados para um objeto no sistema, o estado pode ser convertido entre eles, e o objeto se comporta de maneira diferente em diferentes estados. O modo de estado separa o estado de um objeto do objeto e o encapsula em uma classe de estado especial, para que o estado do objeto possa ser alterado com flexibilidade. O modo de estado é um modo comportamental de objeto.
2. Cenários aplicáveis
Usado para resolver o problema de encapsulamento de múltiplas transições de estado de objetos complexos no sistema e comportamentos sob diferentes estados. Simplificando, é para lidar com vários estados de objetos e suas conversões mútuas.
Iii. Diagrama de classe UML
4. Participantes
1), AbstractState (Classe de Estado Resumo):
A classe de estado abstrata define os métodos abstratos de comportamento em diferentes estados, e diferentes operações comportamentais são implementadas em subclasses (diferentes subclasses de estado).
2) Concretestado (subclasse de estado que implementa o comportamento em estados específicos):
Subclasses de classes de estado abstratas, cada subclasse implementa um comportamento relacionado a um estado da classe do ambiente (contexto). Cada classe de estado específica corresponde a um estado específico do ambiente, e o comportamento de diferentes estados específicos é diferente.
3) Contexto (classe do ambiente que possui objetos estaduais):
Tendo atributos do Estado, devido à diversidade do meio ambiente, pode ter estados diferentes e se comportar de maneira diferente em diferentes estados. Mantenha uma instância de estado abstrata na classe Environment. Esta instância define o estado do ambiente atual (método setState ()) e separa o comportamento específico do estado e é concluído por diferentes subclasses de estado.
5. Use o aprendizado de caso
1. Classe de Estado Resumo: Estado.java
/ *** Modo de estado do padrão Java Design* Classe de estado abstrato* @author [email protected]**/ public abstrate classe estado {/ *** Método abstrato do comportamento do estado, a subclasse de estado específica implementa diferentes lógica de comportamento*/ public abstrate void comportamento (); }
2.
/ ** * Subclasse de status específica a * @author [email protected] */ public class concretatea estende o estado {@Override public void Comportament () {// Comportamento comercial do estado A e o que pode fazer quando é que ele não pode fazer o pagamento. pagamento"); }}
3.
/** * Specific state subclass B * @author [email protected] * */ public class ConcreteStateB extends State { @Override public void Behavior() { // Business behavior of state B, and what can it do when it is in this state // For example: when the mobile phone is in arrears and downtime, System.out.println("The mobile phone is in arrears and downtime, cannot make chamadas "); }}
4. Classe do meio ambiente com objetos de estado: context.java
/** * Classe de Meio Ambiente/Contexto <br/> * tem um objeto de estado e pode concluir a transição entre os estados [As mudanças/comutação do estado são implementadas na classe Environment] * @author [email protected] */Public Class Context {// mantém uma referência a um estado de estado abstrato Estado privado Estado privado Estado; / * * Simule atributos de taxa de telefonemas para telefone celular <br/> * O estado do ambiente é o seguinte: * 1>, quando Bill> = 0,00 $: Quando o estado é normal, você ainda pode fazer chamadas * 2>, quando Bill <0,00 $: quando o telefone for devido, você não pode fazer chamadas */Bill duplo privado; /*** Função de processamento do ambiente, chamando o comportamento da instância do estado completa a lógica de negócios <br/>* referências a diferentes comportamentos em diferentes estados*/public void handle () {checkState (); estado.BeHavior (); }/*** Verifique o estado do ambiente: as alterações/comutação do estado são implementadas na classe de ambiente*/private void checkState () {if (bill> = 0.00) {setState (new concretestatea ()); } else {SetState (new concretestateB ()); }}/** * Defina o estado do ambiente <br/> * Método privado, o objetivo é permitir que o estado do ambiente seja controlado/comutado pelo próprio ambiente do sistema, e os usuários externos não precisam se preocupar com o estado dentro do ambiente * @param state */private void setState (estado de estado) {this.state = estado; } public Double getBill () {retornar Bill; } public void setbill (fatura dupla) {this.bill = bill; }}
5.
classe pública client {public static void main (string [] args) {context context = new context (); context.setBill (5.50); System.out.println ("saldo atual da taxa de chamada:" + context.getBill () + "$"); context.Handle (); context.setBill (-1,50); System.out.println ("saldo atual da taxa de chamada:" + context.getBill () + "$"); context.Handle (); context.setBill (50,00); System.out.println ("saldo atual da taxa de chamada:" + context.getBill () + "$"); context.Handle (); }} 6. Resultados da operação do programa:
Saldo atual da taxa de chamada: 5,5 $
O saldo atual da conta telefônica pode ser feito normalmente quando o telefone não está baixo devido ao adiantamento: -1,5 $
O saldo atual da taxa telefônica não pode fazer chamadas quando o telefone estiver fora de serviço.
O telefone pode fazer chamadas normalmente sem qualquer adiantamento
Vi. Expandir
Existem duas implementações diferentes de troca de estado no modo de estado
Método 1: A mudança/comutação de estado é implementada na classe Environment. Como no código do caso de uso acima, o método checkState () na classe de contexto.
/*** Verifique o estado do ambiente: as alterações/comutação do estado são implementadas na classe do ambiente*/private void checkState () {if (bill> = 0.00) {setState (new concretestatea ()); } else {SetState (new concretestateB ()); }} Método 2: A mudança/comutação de estado é implementada em uma subclasse de estado específica.
As etapas de implementação são as seguintes:
1) Inicialize um objeto de instância de estado na classe de contexto da classe Environment e passe o objeto de contexto do ambiente como um parâmetro construtor do estado da subclasse para a instância de subclasse de estado específica.
Por exemplo, na aula de contexto.java
// defina o estado inicial this.state = new concretestatea (this);
2) Na classe estadual de subclasse específica, de acordo com o objeto de contexto construído, a lógica de negócios julga o status chamando o valor da propriedade do objeto de contexto.
Por exemplo, na classe concretestata.java, a subclasse de estado específica:
/ ** * Subclasse de estado específica A * @author [email protected] */ classe pública concretatea estende o estado {contexto privado ctx; public concretestatea (contexto de contexto) {ctx = context; } @Override public void Comportport () {// Comportamento comercial do Estado A e o que pode fazer quando está nesse estado // por exemplo: o telefone celular pode fazer chamadas normalmente quando não está diminuindo devido ao adiantamento de pagamento.out.println ("O telefone celular pode fazer chamadas normalmente quando não for o pagamento"); checkState (); }/** * Verifique se o estado precisa ser convertido <br/> * A troca de estado é implementada na subclasse de estado específica */private void checkState () {if (ctx.getbill () <0,00) {ctx.setstate (novo concretestateb (ctx)); }}}
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.