Latest web development tutorials

Padrão Memento

o modo Memo (Memento Padrão) para salvar um estado de um objeto, a fim de restaurar o objeto no momento apropriado. padrões de compensação pertencem padrões comportamentais.

introdução

Intenção: Sem violar o encapsulamento de capturar o estado interno de um objeto, e salvar o estado fora do objeto.

Principalmente para resolver: o modelo é o chamado memorando sem destruir o pacote, capturar o estado interno de um objeto, e salvar o estado fora do objeto para que o objeto pode mais tarde ser restaurado para um estado salvo anteriormente.

Quando usar: muitas vezes temos sempre que gravar o estado interno de um objeto, a finalidade de fazer isso é permitir que os usuários para cancelar a operação incerta ou incorreta, pode ser restaurado ao seu estado original, de modo que ele "se arrepender" para comer.

Como corrigir: um memorando de classe concebido para armazenar o estado do objeto.

Código chave: clientes não par com a classe memorando, juntamente com a classe de gerenciamento memorando.

Exemplos de aplicação: 1, se arrepender mais tarde.2, ao jogar o arquivo de jogo. 3, CTRI o Windows Pista + z. 4, ou seja na parte de trás. 4, o banco de dados de gerenciamento de transações.

Vantagens: 1, para fornecer aos usuários uma maneira de restaurar o estado do mecanismo que permite aos usuários ser mais conveniente para voltar a uma história do estado.2, para alcançar um pacote de informações, de modo que o usuário não precisa se preocupar com o estado de conservação dos detalhes.

Desvantagens: consumir recursos.Se as variáveis ​​de membro da classe também, é obrigado a pegar um relativamente grandes recursos, e cada vez que você salvar vai consumir uma certa quantidade de memória.

cenários de uso: 1, a necessidade de salvar / restaurar o estado relevante dos dados de cena.2, proporciona-se uma operação de reversão.

Nota: 1, a fim de cumprir os princípios de Demeter, também adicionar uma mensagem de gestão de classe.2, a fim de economizar memória, você pode usar o modo + memo modelo de protótipo.

realização

modo de memorando usa três classesMemento,cedentes ezelador.Memento contendo o objeto a ser restaurado no estado. Originador Amnésia objecto é criado e armazenado no estado. Porteiro objeto é responsável por restaurar objetos de estado Memento.

MementoPatternDemo,nossas aulas de demonstração utilizandocaseiroeOriginatorobjeto para exibir o estado da recuperação de objeto.

padrão Memorando UML diagrama

passo 1

Crie uma classe Memento.

Memento.java

classe pública Memento {
   Estado private String;

   Memento pública (estado String) {
      this.state = Estado;
   }

   Cadeia getState pública () {
      estado retornar;
   }	
}

passo 2

Criar classe originador.

Originator.java

Originator classe pública {
   Estado private String;

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

   Cadeia getState pública () {
      estado retornar;
   }

   pública Memento saveStateToMemento () {
      retornar nova Memento (estado);
   }

   public void getStateFromMemento (Memento Memento) {
      state = Memento.getState ();
   }
}

passo 3

Criar classe zelador.

CareTaker.java

importação java.util.ArrayList;
import java.util.List;

Porteiro classe pública {
   Lista privada <Memento> mementoList = new ArrayList <Memento> ();

   public void add (estado Memento) {
      mementoList.add (estado);
   }

   Memento pública get (int index) {
      voltar mementoList.get (index);
   }
}

passo 4

Usecaseiroecedentesobjetos.

MementoPatternDemo.java

MementoPatternDemo classe pública {
   main (String [] args) public static void {
      Originator originador = new originador ();
      Porteiro Porteiro = new Porteiro ();
      originator.setState ( "Estado # 1");
      originator.setState ( "Estado # 2");
      careTaker.add (originator.saveStateToMemento ());
      originator.setState ( "Estado # 3");
      careTaker.add (originator.saveStateToMemento ());
      originator.setState ( "Estado # 4");

      System.out.println ( "Estado atual:" + originator.getState ());		
      originator.getStateFromMemento (careTaker.get (0));
      System.out.println ( "First salvou Estado:" + originator.getState ());
      originator.getStateFromMemento (careTaker.get (1));
      System.out.println ( "Second salvou Estado:" + originator.getState ());
   }
}

passo 5

Verifique saída.

Estado atual: Estado # 4
Estado primeira salva: Estado # 2
Estado segunda salvo: Estado # 3