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.
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