Latest web development tutorials

padrão de Estado

No modo de estado (Padrão Estado), o comportamento da classe é baseada em seu status alterado. Este tipo de padrões de projeto pertencem padrões comportamentais.

No modelo de estado, criamos objetos e uma variedade de estados comportamentais juntamente com o estado da representação contexto do objeto alterações objeto alterado.

introdução

Intenção: Permite que um objeto altere seu comportamento no estado interno é alterado, o objeto parece modificar sua classe.

Principalmente para resolver: o comportamento de um objeto depende do seu estado (atributos), e você pode mudá-lo de acordo com a sua mudança de comportamento relacionados com o estado.

Quando usar: Código contém um grande número de objectos relacionados com o estatuto de declarações condicionais.

Como corrigir: o estatuto de classes específicas fora abstrato.

O código de chave: a interface do modo de comando geralmente apenas um método.O estado da interface que tem um ou mais métodos. Além disso, o método de modo de estado da classe de implementação, geralmente o valor de retorno, ou alterar o valor de uma variável de instância. Ou seja, o estado eo estado do modelo de objeto é geralmente relevante. métodos de classe de implementação têm diferentes funções, métodos de interface coberto. Modo de Estado e modo de comando o mesmo também pode ser usado para eliminar outras condições if ... selecção mais.

Exemplos de aplicação: 1, jogando jogador de basquete pode ter um estado normal, não o estado de estado e anormal normal.2, Marquês Yi de Zeng sinos, o "relógio está interface abstrata ',' relógio A 'e outro estado específico, ambiente específico' Bianzhong '(Contexto).

Vantagens: 1, encapsula as regras de transformação.2, enumerar estados possíveis antes que o estado enumeração precisa para determinar o estado das espécies. 3, todos com um comportamento relacionado com a estatal em uma classe, e você pode facilmente adicionar novo estado, só precisa mudar o estado de um objeto pode alterar o comportamento de objetos. 4, permitindo que o estado de estado lógico transição do objeto em um, em vez de um enorme bloco de declarações condicionais. 5, permite que vários objetos compartilham um ambiente de objeto de estado, reduzindo assim o número de objetos no sistema.

Desvantagens: 1, o padrão de estado de uso é obrigado a aumentar o número de classes de sistema e objetos.2, a estrutura e implementação do padrão de estado são mais complexas, se usado incorretamente pode causar estrutura e código do programa confusão. 3, suporte para o padrão de estado "Open Princípio Fechado" não é muito bom, você pode alternar o estado do modelo de estado, adicionando novas classes necessidade de modificar o estatuto dos responsáveis ​​por transições de estado do código-fonte, ou não pode mudar para o novo estado, e modificar uma classe ato estatal também precisará modificar o código-fonte da classe correspondente.

cenários de uso: 1, com o comportamento de mudança de estado e mudança de cenário.2, desvio condicional declaração substituto.

Nota: Ao utilizar um comportamento de estado limitado por modo de estado, eo estado não é mais do que cinco.

realização

Nós vamos criar uma interface interface de status entidade eEstadoclasse de implementação doEstado.O contexto é uma classe com um certo estado.

StatePatternDemo,demonstramos o uso de classe e de status objetosContextoContexto para demonstrar a mudança de comportamento no estado de mudança.

padrão de Estado UML diagrama

passo 1

Criar uma interface.

State.java

public interface State {
   public void doAction(Context context);
}

passo 2

Criar classe de entidade que implementa a interface.

StartState.java

classe pública StartState implementa Estado {

   DoAction public void (context Contexto) {
      System.out.println ( "Jogador está em estado inicial");
      context.setState (this);	
   }

   public String toString () {
      retornar "estado inicial";
   }
}

StopState.java

public class StopState implements State {

   public void doAction(Context context) {
      System.out.println("Player is in stop state");
      context.setState(this);	
   }

   public String toString(){
      return "Stop State";
   }
}

passo 3

Criar classeContext.

Context.java

Contexto classe pública {
   Estado Estado privada;

   Contexto pública () {
      state = null;
   }

   setState public void (estado Estado) {
      this.state = Estado;		
   }

   público do Estado getState () {
      estado retornar;
   }
}

passo 4

UseContextopara ver o comportamento quando o estado muda alterações deestado.

StatePatternDemo.java

classe pública StatePatternDemo {
   main (String [] args) public static void {
      Contexto contexto = new contexto ();

      StartState startState = new StartState ();
      startState.doAction (contexto);

      System.out.println (context.getState toString () ().);

      StopState stopState = new StopState ();
      stopState.doAction (contexto);

      System.out.println (context.getState toString () ().);
   }
}

passo 5

Verifique saída.

Jogador está em estado inicial
Estado Iniciar
Jogador está em estado de paragem
Estado paragem