Este artículo describe el uso del modo MEMO para implementar las funciones del juego de paso de nivel de Java. Compártelo para su referencia, como sigue:
1. Definición de patrones
El modo MEMO captura el estado interno de un objeto sin destruir el recinto y guarda este estado fuera del objeto. De esta manera, el objeto se puede restaurar a su estado guardado original más adelante.
2. Ejemplos del modelo
1 análisis de modo
Tomamos prestado el juego de nivel para ilustrar este modo.
2 Diagrama de clase estática en modo memo
3 ejemplos de código (modo de memo de caja negra)
3.1 Crear interfaz estrecha de memo Inarrowmento
paquete com.demo.memento;/** * Interfaz estrecha de memorandum (no se proporciona ningún método, los objetos externos no pueden acceder a la información interna del objeto Memorandum) * * @Author * */Public Interface Inarrowmento {}3.2 Memorandum Patrocinador Héroe
paquete com.demo.originator; import java.util.random; import com.demo.memento.inarrowmemento;/** * Challenger * * @author * */public class Hero {// Blood Value Private int Blood; // Force valor privado int sword; // Número aleatorio Private Final Random Random = new Random (); // Construye el método inicializar contenido público hero () {this.blood = 100; this.sword = 100; } // Crear memorandum para guardar contenido público inarrowmento creeMemento () {System.out.println ("Crear memorandum ..."); devolver nuevo Memento (this.blood, this.sword); } // Restaurar contenido de Memorandum public void Restorfrommento (Inarrowmento Mento) {System.out.println ("Restaurar el estado en el memorando ..."); if (Memento! = NULL) {Memento Memento2 = (Memento) Memento; this.blood = memento2.getblood (); this.sword = memento2.getsword (); }} / ** * desafío jefe * / public int koboss () {// Cuando el valor de sangre es <= 0, el desafío falla. Suponga que la probabilidad de derrotar al jefe es 2% // Al juzgar, todavía hay un valor de sangre si (this.blood <= 0 || this.sword <= 0) {System.out.println (this.ToString ()); System.out.println ("¡Cambiar el jefe fallido!"); regreso -1; } else {// Obtenga el número aleatorio doble win = math.random (); if (win <= 0.02) {System.out.println (this.ToString ()); System.out.println ("¡Felicitaciones, desafíe al jefe con éxito!"); regresar 1; } else {System.out.println (this.ToString ()); System.out.println ("Continuar atacando al jefe ..."); // El número aleatorio reduce el valor sanguíneo y el valor de la fuerza para continuar KO int Blood_sub = Random.NextInt (10); int sword_sub = random.nextint (10); this.blood -= Blood_sub; this.sword -= sword_sub; regresar 0; }}} @Override public String toString () {return "Valor sanguíneo actual:" + this.blood + " - Valor de fuerza actual:" + this.sword; } / ** * Memorandum (toda la clase es privada y solo puede ser accedida por el iniciador) * * * @author * * / private clase Memento implementa inarrowmento {// valor sanguíne // Valor de fuerza Final Private Int Sword; // Contenido de inicialización del constructor Memento privado (int Blood, int Sword) {this.blood = Blood; this.sword = sword; } private int getBlood () {return Blood; } private int getSword () {return Sword; }}}3.3 Gerente de Memorando - Careta
paquete com.demo.caretaker; import com.demo.memento.inarrowmemento;/** * administrador * * @author * */public class Caretaker {private Inarrowmento Memento; / ** * Objeto Get Memorandum * * @return */ public inarrowmemento getMemento () {return Memento; } / ** * Guardar objeto Memorandum * * @param Memento * / public void setmemento (inarrowmento mento) {this.memento = mento; }}3.4 Deja que el héroe desafíe al jefe un cliente
paquete com.demo; import com.demo.caretaker.caretaker; import com.demo.originator.hero;/** * Client principal aplicación * * @author * */public class Client {/** * @param args */public static void main (string [] args) {// hero herogro de rol de rol = new hero (); // Crea Administrador Caretaker Caretaker = new Caretaker (); // Guardar la información de estado antes del desafío Caretaker.SetMemento (Hero.CreateMemento ()); // Solo hay tres oportunidades para derrotar al jefe int cnt = 1; // Resultado del jefe de desafío int ko = -1; while (ko! = 1 && cnt <= 3) {system.out .println ("=======================" + CNT + "Desafío ================================================================================================================================ ================================================================================================================================ {if (ko == -1) {// falló y restaurado a los tiempos de desafío del estado inicial. }}4 Resultados de ejecución
Crea una nota ...
========================================
Valor sanguíneo actual: 100 - Valor de fuerza actual: 100
Continúa atacando al jefe ...
Valor sanguíneo actual: 96 - Valor de fuerza actual: 99
Continúa atacando al jefe ...
Valor sanguíneo actual: 90 - Valor de fuerza actual: 98
Continúa atacando al jefe ...
Valor sanguíneo actual: 81 - Valor de fuerza actual: 95
Continúa atacando al jefe ...
Valor sanguíneo actual: 78 - Valor de fuerza actual: 93
Continúa atacando al jefe ...
Valor sanguíneo actual: 72 - Valor de fuerza actual: 88
Continúa atacando al jefe ...
Valor sanguíneo actual: 64 - Valor de fuerza actual: 85
Continúa atacando al jefe ...
Valor sanguíneo actual: 56 - Valor de fuerza actual: 80
Continúa atacando al jefe ...
Valor sanguíneo actual: 49 - Valor de fuerza actual: 73
Continúa atacando al jefe ...
Valor sanguíneo actual: 45 - Valor de fuerza actual: 71
Continúa atacando al jefe ...
Valor sanguíneo actual: 37 - Valor de fuerza actual: 68
Continúa atacando al jefe ...
Valor sanguíneo actual: 29 - Valor de fuerza actual: 65
Continúa atacando al jefe ...
Valor sanguíneo actual: 20 - Valor de fuerza actual: 59
Continúa atacando al jefe ...
Valor sanguíneo actual: 11 - Valor de fuerza actual: 54
Continúa atacando al jefe ...
Valor sanguíneo actual: 9 - Valor de fuerza actual: 52
Continúa atacando al jefe ...
Valor sanguíneo actual: 3 - Valor de fuerza actual: 45
Continúa atacando al jefe ...
Valor sanguíneo actual: -3 - Valor de fuerza actual: 41
¡No logró desafiar al jefe!
Restaurar el estado en la nota ...
====================== 2do desafío =================
Valor sanguíneo actual: 100 - Valor de fuerza actual: 100
Continúa atacando al jefe ...
Valor sanguíneo actual: 96 - Valor de fuerza actual: 95
Continúa atacando al jefe ...
Valor sanguíneo actual: 96 - Valor de fuerza actual: 91
Continúa atacando al jefe ...
Valor sanguíneo actual: 88 - Valor de fuerza actual: 82
Continúa atacando al jefe ...
Valor sanguíneo actual: 79 - Valor de fuerza actual: 79
Continúa atacando al jefe ...
Valor sanguíneo actual: 76 - Valor de fuerza actual: 72
Continúa atacando al jefe ...
Valor sanguíneo actual: 73 - Valor de fuerza actual: 70
Continúa atacando al jefe ...
Valor sanguíneo actual: 72 - Valor de fuerza actual: 66
Continúa atacando al jefe ...
Valor sanguíneo actual: 72 - Valor de fuerza actual: 61
Continúa atacando al jefe ...
Valor sanguíneo actual: 72 - Valor de fuerza actual: 58
Continúa atacando al jefe ...
Valor sanguíneo actual: 72 - Valor de fuerza actual: 52
Continúa atacando al jefe ...
Valor sanguíneo actual: 63 - Valor de fuerza actual: 51
Continúa atacando al jefe ...
Valor sanguíneo actual: 62 - Valor de fuerza actual: 50
Continúa atacando al jefe ...
Valor sanguíneo actual: 54 - Valor de fuerza actual: 41
Continúa atacando al jefe ...
Valor sanguíneo actual: 50 - Valor de fuerza actual: 39
Continúa atacando al jefe ...
Valor sanguíneo actual: 47 - Valor de fuerza actual: 39
Continúa atacando al jefe ...
Valor sanguíneo actual: 43 - Valor de fuerza actual: 38
Continúa atacando al jefe ...
Valor sanguíneo actual: 37 - Valor de fuerza actual: 36
Continúa atacando al jefe ...
Valor sanguíneo actual: 34 - Valor de fuerza actual: 35
Continúa atacando al jefe ...
Valor sanguíneo actual: 32 - Valor de fuerza actual: 27
Continúa atacando al jefe ...
Valor sanguíneo actual: 28 - Valor de fuerza actual: 22
Continúa atacando al jefe ...
Valor sanguíneo actual: 26 - Valor de fuerza actual: 15
Continúa atacando al jefe ...
Valor sanguíneo actual: 24 - Valor de fuerza actual: 11
Continúa atacando al jefe ...
Valor sanguíneo actual: 19 - Valor de fuerza actual: 3
Continúa atacando al jefe ...
Valor sanguíneo actual: 10 - Valor de fuerza actual: -3
¡No logró desafiar al jefe!
Restaurar el estado en la nota ...
==================== El tercer desafío ===================
Valor sanguíneo actual: 100 - Valor de fuerza actual: 100
Continúa atacando al jefe ...
Valor sanguíneo actual: 99 - Valor de fuerza actual: 93
Continúa atacando al jefe ...
Valor sanguíneo actual: 98 - Valor de fuerza actual: 84
Continúa atacando al jefe ...
Valor sanguíneo actual: 98 - Valor de fuerza actual: 82
Continúa atacando al jefe ...
Valor sanguíneo actual: 95 - Valor de fuerza actual: 76
Continúa atacando al jefe ...
Valor sanguíneo actual: 88 - Valor de fuerza actual: 68
Continúa atacando al jefe ...
Valor sanguíneo actual: 81 - Valor de fuerza actual: 64
Continúa atacando al jefe ...
Valor sanguíneo actual: 76 - Valor de fuerza actual: 64
Continúa atacando al jefe ...
Valor sanguíneo actual: 67 - Valor de fuerza actual: 64
¡Felicitaciones, has desafiado con éxito al jefe!
Iii. Los principios de diseño de este patrón
1. Mantener el límite del paquete
2 Implementación de interfaz dual para garantizar la seguridad.
4. Use ocasiones
1 Cuando es necesario restaurar el estado anterior de un objeto en un momento determinado.
2. En el modo de memo de caja blanca, debe guardar el estado de un objeto en un momento determinado externamente, pero si usa una interfaz para permitir que otros objetos obtengan directamente estos estados, expondrá los detalles de implementación del objeto y destruirá la encapsulación del objeto.
3 La implementación del modo de memo de caja negra proporciona un mecanismo de acceso de doble interfaz, proporcionando una amplia interfaz al objeto iniciador y una interfaz estrecha a objetos distintos del iniciador, resolviendo así efectivamente la encapsulación y la seguridad.
V. Diagrama de clase estática
1 Diagrama de clases estáticas en modo de caja de caja blanca
2 Diagrama de clases estáticas en modo de caja de caja negra
Para obtener más contenido relacionado con Java, los lectores interesados en este sitio pueden ver los temas: "Estructura de datos de Java y tutorial de algoritmo", "Resumen de las puntas de nodo de operación Java DOM", "Resumen de los archivos Java y consejos de operación de directorio" y "Summary of Java Cache Operation Tips" ".
Espero que este artículo sea útil para la programación Java de todos.