Este artigo descreve o uso do modo de memorando para implementar as funções de Java. Compartilhe -o para sua referência, como segue:
1. Definição do padrão
O modo de memorando captura o estado interno de um objeto sem destruir o gabinete e salva esse estado fora do objeto. Dessa forma, o objeto pode ser restaurado ao seu estado salvo original posteriormente.
2. Exemplos do modelo
1 Análise de modo
Emprestamos o jogo de nível para ilustrar esse modo.
2 Diagrama de classe estática no modo de memorando
3 exemplos de código (modo de memorando de caixa preta)
3.1 Crie uma interface estreita de memorando INARROWMENTO
pacote com.demo.memento;/** * interface estreita do memorando (nenhum método é fornecido, objetos externos não podem acessar informações internas do objeto de memorando) * * @author * */interface pública inarrowMemento {}3.2 Memorando Patrocinador Herói
pacote com.demo.originator; importar java.util.random; importar com.demo.memento.inarrowmemento;/** * Challenger * * @author * */public classe herói {// Valor sanguíneo Private Int Blood; // Valor da força Private Int Sword; // Número aleatório privado final Random = novo aleatório (); // Método de construção inicialize o conteúdo público herói () {this.blood = 100; this.sword = 100; } // Crie memorando para salvar conteúdo public inarrowMemento CreateMemento () {System.out.println ("Criar memorando ..."); devolver nova lembrança (this.blood, this.sword); } // Restaurar conteúdo de memorando public void RestoreFroMemento (InarrowMemento Memento) {System.out.println ("Restaure o status no memorando ..."); if (Memento! = NULL) {Memento Memento2 = (Memento) Memento; this.blood = Memento2.getBlood (); this.sword = Memento2.getsword (); }} / ** * desafio Boss * / public int koboss () {// Quando o valor do sangue é <= 0, o desafio falha. Suponha que a probabilidade de derrotar o chefe seja 2% // ao julgar, ainda existe um valor sanguíneo se (this.blood <= 0 || this.sword <= 0) {System.out.println (this.tostring ()); System.out.println ("Alterar o chefe falhou!"); retornar -1; } else {// obtenha o número aleatório duplo win = math.random (); if (win <= 0,02) {System.out.println (this.toString ()); System.out.println ("Parabéns, desafie o chefe com sucesso!"); retornar 1; } else {System.out.println (this.toString ()); System.out.println ("Continue atacando o chefe ..."); // Número aleatório reduz o valor do sangue e o valor da força para continuar ko int sangue_sub = random.nextint (10); int sword_sub = random.nextint (10); this.blood -= Blood_sub; this.sword -= sword_sub; retornar 0; }}} @Override public string tostring () {return "atual valor sanguíneo:" + this.blood + " - valor de força atual:" + this.sword; } / ** * memorando (a classe inteira é privada e só pode ser acessada pelo iniciador) * * @author * * / classe privada lembrança implementa InarrowMemento {// Valor sanguíneo Private final Int Blood; // Valor de força private final Int Sword; // Conteúdo de inicialização do construtor Memento privado (Int Blood, Int Sword) {this.blood = Blood; this.sword = espada; } private int getBlood () {return sangue; } private int getSword () {Return Sword; }}}3.3 Memorando Gerente - Cuidador
pacote com.demo.caretaker; importar com.demo.memento.inarrowmemento;/** * administrador * * @author * */public class Caretaker {private inarrowMemento Memento; / ** * Obtenha objeto de memorando * * @return */ public inarrowMemento getMemento () {return medemo; } / ** * Salvar objeto de memorando * * @param lembrança * / public void setMemento (inarrowMemento Memento) {this.Memento = Memento; }}3.4 Deixe o herói desafiar o cliente One One
pacote com.demo; importar com.demo.caretaker.caretaker; importar com.demo.originator.hero;/** * Aplicativo principal do cliente * * @author * */public class Client {/** * @param args */public static void main (string [] args) {// Crie Hero Hero Hero Hero = New Hero = New Hero = New Hero = New Hero = New Hero = New Hero = New Hero = New Hero = New Hero = New Hero = New Hero = New Hero = New Hero = New Hero = New Hero = New Her; // Crie o cuidador do administrador cuidador = new Caretaker (); // salve as informações de status antes do desafio caretaker.setMemento (hero.creatememento ()); // Existem apenas três chances de derrotar o chefe int cnt = 1; // RESULTADO DE CHEFE DE CAFÍCIL Int KO = -1; while (ko! = 1 && cnt <= 3) {System.out .println ("======================" + CNT + "Desafio ======================================================================================= ======================================================================================= {KO == -1) {// Desafio e restaurado para o Estado inicial HERO.restorefRomemento (Caretaker.getMemento (); }}}4 resultados de execução
Crie um memorando ...
========================================
Valor do sangue atual: 100 - Valor da força atual: 100
Continue a atacar o chefe ...
Valor do sangue atual: 96 - Valor da força atual: 99
Continue a atacar o chefe ...
Valor do sangue atual: 90 - Valor da força atual: 98
Continue a atacar o chefe ...
Valor do sangue atual: 81 - Valor da força atual: 95
Continue a atacar o chefe ...
Valor do sangue atual: 78 - Valor da força atual: 93
Continue a atacar o chefe ...
Valor do sangue atual: 72 - Valor da força atual: 88
Continue a atacar o chefe ...
Valor do sangue atual: 64 - Valor da força atual: 85
Continue a atacar o chefe ...
Valor do sangue atual: 56 - Valor da força atual: 80
Continue a atacar o chefe ...
Valor do sangue atual: 49 - Valor da força atual: 73
Continue a atacar o chefe ...
Valor do sangue atual: 45 - Valor da força atual: 71
Continue a atacar o chefe ...
Valor do sangue atual: 37 - Valor da força atual: 68
Continue a atacar o chefe ...
Valor do sangue atual: 29 - Valor da força atual: 65
Continue a atacar o chefe ...
Valor do sangue atual: 20 - Valor da força atual: 59
Continue a atacar o chefe ...
Valor do sangue atual: 11 - Valor da força atual: 54
Continue a atacar o chefe ...
Valor do sangue atual: 9 - Valor da força atual: 52
Continue a atacar o chefe ...
Valor do sangue atual: 3 - Valor da força atual: 45
Continue a atacar o chefe ...
Valor do sangue atual: -3 - Valor da força atual: 41
Falhou em desafiar o chefe!
Restaurar o status no memorando ...
======================= 2º desafio =================
Valor do sangue atual: 100 - Valor da força atual: 100
Continue a atacar o chefe ...
Valor do sangue atual: 96 - Valor da força atual: 95
Continue a atacar o chefe ...
Valor do sangue atual: 96 - Valor da força atual: 91
Continue a atacar o chefe ...
Valor do sangue atual: 88 - Valor da força atual: 82
Continue a atacar o chefe ...
Valor do sangue atual: 79 - Valor da força atual: 79
Continue a atacar o chefe ...
Valor do sangue atual: 76 - Valor da força atual: 72
Continue a atacar o chefe ...
Valor do sangue atual: 73 - Valor da força atual: 70
Continue a atacar o chefe ...
Valor do sangue atual: 72 - Valor da força atual: 66
Continue a atacar o chefe ...
Valor do sangue atual: 72 - Valor da força atual: 61
Continue a atacar o chefe ...
Valor do sangue atual: 72 - Valor da força atual: 58
Continue a atacar o chefe ...
Valor do sangue atual: 72 - Valor da força atual: 52
Continue a atacar o chefe ...
Valor do sangue atual: 63 - Valor da força atual: 51
Continue a atacar o chefe ...
Valor do sangue atual: 62 - Valor da força atual: 50
Continue a atacar o chefe ...
Valor do sangue atual: 54 - Valor da força atual: 41
Continue a atacar o chefe ...
Valor do sangue atual: 50 - Valor da força atual: 39
Continue a atacar o chefe ...
Valor do sangue atual: 47 - Valor da força atual: 39
Continue a atacar o chefe ...
Valor do sangue atual: 43 - Valor da força atual: 38
Continue a atacar o chefe ...
Valor do sangue atual: 37 - Valor da força atual: 36
Continue a atacar o chefe ...
Valor do sangue atual: 34 - Valor da força atual: 35
Continue a atacar o chefe ...
Valor do sangue atual: 32 - Valor da força atual: 27
Continue a atacar o chefe ...
Valor do sangue atual: 28 - Valor da força atual: 22
Continue a atacar o chefe ...
Valor do sangue atual: 26 - Valor da força atual: 15
Continue a atacar o chefe ...
Valor do sangue atual: 24 - Valor da força atual: 11
Continue a atacar o chefe ...
Valor do sangue atual: 19 - Valor da força atual: 3
Continue a atacar o chefe ...
Valor do sangue atual: 10 - Valor da força atual: -3
Falhou em desafiar o chefe!
Restaurar o status no memorando ...
==================== O terceiro desafio ===================
Valor do sangue atual: 100 - Valor da força atual: 100
Continue a atacar o chefe ...
Valor do sangue atual: 99 - Valor da força atual: 93
Continue a atacar o chefe ...
Valor do sangue atual: 98 - Valor da força atual: 84
Continue a atacar o chefe ...
Valor do sangue atual: 98 - Valor da força atual: 82
Continue a atacar o chefe ...
Valor do sangue atual: 95 - Valor da força atual: 76
Continue a atacar o chefe ...
Valor do sangue atual: 88 - Valor da força atual: 68
Continue a atacar o chefe ...
Valor do sangue atual: 81 - Valor da força atual: 64
Continue a atacar o chefe ...
Valor do sangue atual: 76 - Valor da força atual: 64
Continue a atacar o chefe ...
Valor do sangue atual: 67 - Valor da força atual: 64
Parabéns, você desafiou com sucesso o chefe!
Iii. Os princípios de design deste padrão
1. Mantendo o limite do pacote
2 Implementação de interface dupla para garantir a segurança.
4. Use ocasiões
1 Quando for necessário restaurar o estado anterior de um objeto em um determinado momento.
2. No modo de memorando de caixa branca, você precisa salvar o estado de um objeto em um certo momento externamente, mas se você usar uma interface para permitir que outros objetos obtenham diretamente esses estados, ele exporá os detalhes da implementação do objeto e destruirá o encapsulamento do objeto.
3 A implementação do modo de memorando de caixa preta fornece um mecanismo de acesso à interface duplo, fornecendo uma ampla interface ao objeto iniciador e interface estreita a objetos que não sejam o iniciador, resolvendo efetivamente o encapsulamento e a segurança.
V. Diagrama de classe estática
1 diagrama de classe estática no modo de memorando de caixa branca
2 Diagrama de classe estática no modo de memorando de caixa preta
Para mais conteúdo relacionado ao Java, os leitores interessados neste site podem visualizar os tópicos: "Estrutura de dados Java e tutorial de algoritmo", "Resumo da operação Java Dom Node Tips", "Resumo de Dicas de Operação de Arquivos e Diretórios de Java" e "Resumo das dicas de operação do Java Cache"
Espero que este artigo seja útil para a programação Java de todos.