이 기사에서는 메모 모드를 사용하여 Java의 레벨 패스 게임 기능을 구현하는 방법에 대해 설명합니다. 다음과 같이 참조에 대해 공유하십시오.
1. 패턴 정의
메모 모드는 인클로저를 파괴하지 않고 객체의 내부 상태를 캡처 하고이 상태를 물체 외부에 저장합니다. 이런 식으로 객체는 나중에 원래 저장 상태로 복원 할 수 있습니다.
2. 모델의 예
1 모드 분석
우리는이 모드를 설명하기 위해 레벨 스루 게임을 빌 렸습니다.
2 메모 모드 정적 클래스 다이어그램
3 코드 예제 (블랙 박스 메모 모드)
3.1 메모 좁은 인터페이스 inarrowmemento를 만듭니다
package com.demo.memento;/** * Memorandum Narrow Interface (메소드가 제공되지 않음, 외부 객체는 메모의 내부 정보에 액세스 할 수 없습니다) * * @author */public interface inarrowmemento {}3.2 각서 후원자 영웅
package com.demo.originator; import java.util.random; import com.demo.memento.inarrowmemento;/** * challenger * * @author */public class hero {// 혈액 가치 개인 int blood; // 강제 가치 개인 int 검; // 임의 번호 개인 최종 임의 임의 = 새 랜덤 (); // 구성 메소드 초기화 콘텐츠 공개 영웅 () {this.blood = 100; this.sword = 100; } // 콘텐츠를 저장하기위한 메모를 작성하여 inarrowmemento creatememento () {System.out.println ( "메모 만들기 ..."); New Memento를 반환합니다 (this.blood, this.sword); } // 각서 내용 회복 공개 void restorefrommemento (inarrowmemento memento) {System.out.println ( "메모의 상태 복원 ..."); if (memento! = null) {memento memento2 = (memento) memento; this.blood = memento2.getBlood (); this.sword = memento2.getSword (); }} / ** * 도전 보스 * / public int koboss () {// 혈액 가치가 <= 0 인 경우 도전이 실패합니다. 보스를 물리 칠 확률이 2%라고 가정하면 // 판단 할 때 (this.blood <= 0 || this.sword <= 0) {System.out.println (this.toString ()); System.out.println ( "보스 변경 실패!"); 반품 -1; } else {// 임의의 숫자를 가져옵니다. double win = math.random (); if (win <= 0.02) {System.out.println (this.toString ()); System.out.println ( "축하, 보스에게 성공적으로 도전하십시오!"); 반환 1; } else {system.out.println (this.toString ()); System.out.println ( "보스를 계속 공격합니다 ..."); // 임의의 숫자는 계속해서 혈액 가치와 힘 값을 감소시킵니다. int sword_sub = random.nextint (10); this.blood- = blood_sub; this.sword- = sword_sub; 반환 0; }}} @override public String toString () {return "현재 혈액 가치 :" + this.blood + " - 현재 힘 값 :" + this.sword; } / ** * 각서 (전체 클래스는 비공개이며 개시 자에 의해서만 액세스 할 수 있습니다) * * @author * * / private class memento는 inarrowmemento {// 혈액 가치 개인 최종 혈액; // 강제 가치 개인 최종 소드; // 생성자 초기화 내용 개인 memento (int blood, int sword) {this.blood = blood; this.sword = 검; } private int getBlood () {반환 혈액; } private int getSword () {return sword; }}}3.3 각서 관리자 - 관리자
패키지 com.demo.caretaker; import com.demo.memento.inarrowmemento;/** * 관리자 * * @author */public class caretaker {private inarrowmemento memento; / ** * 메모 대상을 얻습니다 * * @return */ public inarrowmemento getmemento () {return memento; } / ** * 메모 대상 저장 * * @param memento * / public void setmemento (inarrowmemento memento) {this.memento = memento; }}3.4 영웅이 보스 한 명의 고객에게 도전하도록하십시오
패키지 com.demo; import com.demo.caretaker.caretaker; import com.demo.originator.hero;/** * 클라이언트 메인 애플리케이션 * * @author */public class client {/** * @param args */public static void main (String [] args) {// create role hero = new Hero (); // 관리자 Caretaker Caretaker 작성 = New Caretaker (); // 챌린지 Caretaker.setMemento (hero.creatememento ()) 앞에 상태 정보를 저장합니다. // 보스 int cnt = 1을 물리 칠 기회는 세 번 밖에 없습니다. // 도전 상사 결과 int ko = -1; while (ko! = 1 && cnt <= 3) {system.out .println ( "====================" + CNT + "Challenge ======================================================================================================= ======================================================================================================= if (ko == -1) {// 초기 상태의 누적 도전 시간에 복원되었습니다. }}4 실행 결과
메모 만들기 ...
========================================
현재 혈액 값 : 100- 현재 힘 값 : 100
보스를 계속 공격하십시오 ...
현재 혈액 값 : 96- 현재 힘 값 : 99
보스를 계속 공격하십시오 ...
현재 혈액 값 : 90- 현재 힘 값 : 98
보스를 계속 공격하십시오 ...
현재 혈액 값 : 81- 현재 힘 값 : 95
보스를 계속 공격하십시오 ...
현재 혈액 값 : 78- 현재 힘 값 : 93
보스를 계속 공격하십시오 ...
현재 혈액 값 : 72- 현재 힘 값 : 88
보스를 계속 공격하십시오 ...
현재 혈액 값 : 64- 현재 힘 값 : 85
보스를 계속 공격하십시오 ...
현재 혈액 값 : 56- 현재 힘 값 : 80
보스를 계속 공격하십시오 ...
현재 혈액 값 : 49- 현재 힘 값 : 73
보스를 계속 공격하십시오 ...
현재 혈액 값 : 45- 현재 힘 값 : 71
보스를 계속 공격하십시오 ...
현재 혈액 값 : 37- 현재 힘 값 : 68
보스를 계속 공격하십시오 ...
현재 혈액 값 : 29- 현재 힘 값 : 65
보스를 계속 공격하십시오 ...
현재 혈액 값 : 20- 현재 힘 값 : 59
보스를 계속 공격하십시오 ...
현재 혈액 값 : 11- 현재 힘 값 : 54
보스를 계속 공격하십시오 ...
현재 혈액 값 : 9- 현재 힘 값 : 52
보스를 계속 공격하십시오 ...
현재 혈액 값 : 3- 현재 힘 값 : 45
보스를 계속 공격하십시오 ...
현재 혈액 값 : -3- 현재 힘 값 : 41
보스에게 도전하지 못했습니다!
메모에서 상태를 복원 ...
==================== 2nd 챌린지 ===============
현재 혈액 값 : 100- 현재 힘 값 : 100
보스를 계속 공격하십시오 ...
현재 혈액 값 : 96- 현재 힘 값 : 95
보스를 계속 공격하십시오 ...
현재 혈액 값 : 96- 현재 힘 값 : 91
보스를 계속 공격하십시오 ...
현재 혈액 값 : 88- 현재 힘 값 : 82
보스를 계속 공격하십시오 ...
현재 혈액 값 : 79- 현재 힘 값 : 79
보스를 계속 공격하십시오 ...
현재 혈액 값 : 76- 현재 힘 값 : 72
보스를 계속 공격하십시오 ...
현재 혈액 값 : 73- 현재 힘 값 : 70
보스를 계속 공격하십시오 ...
현재 혈액 값 : 72- 현재 힘 값 : 66
보스를 계속 공격하십시오 ...
현재 혈액 값 : 72- 현재 힘 값 : 61
보스를 계속 공격하십시오 ...
현재 혈액 값 : 72- 현재 힘 값 : 58
보스를 계속 공격하십시오 ...
현재 혈액 값 : 72- 현재 힘 값 : 52
보스를 계속 공격하십시오 ...
현재 혈액 값 : 63- 현재 힘 값 : 51
보스를 계속 공격하십시오 ...
현재 혈액 값 : 62- 현재 힘 값 : 50
보스를 계속 공격하십시오 ...
현재 혈액 값 : 54- 현재 힘 값 : 41
보스를 계속 공격하십시오 ...
현재 혈액 값 : 50- 현재 힘 값 : 39
보스를 계속 공격하십시오 ...
현재 혈액 값 : 47- 현재 힘 값 : 39
보스를 계속 공격하십시오 ...
현재 혈액 값 : 43- 현재 힘 값 : 38
보스를 계속 공격하십시오 ...
현재 혈액 값 : 37- 현재 힘 값 : 36
보스를 계속 공격하십시오 ...
현재 혈액 값 : 34- 현재 힘 값 : 35
보스를 계속 공격하십시오 ...
현재 혈액 값 : 32- 현재 힘 값 : 27
보스를 계속 공격하십시오 ...
현재 혈액 값 : 28- 현재 힘 값 : 22
보스를 계속 공격하십시오 ...
현재 혈액 값 : 26- 현재 힘 값 : 15
보스를 계속 공격하십시오 ...
현재 혈액 값 : 24- 현재 힘 값 : 11
보스를 계속 공격하십시오 ...
현재 혈액 값 : 19- 현재 힘 값 : 3
보스를 계속 공격하십시오 ...
현재 혈액 값 : 10- 현재 힘 값 : -3
보스에게 도전하지 못했습니다!
메모에서 상태를 복원 ...
==================== 세 번째 도전 =======================
현재 혈액 값 : 100- 현재 힘 값 : 100
보스를 계속 공격하십시오 ...
현재 혈액 값 : 99- 현재 힘 값 : 93
보스를 계속 공격하십시오 ...
현재 혈액 값 : 98- 현재 힘 값 : 84
보스를 계속 공격하십시오 ...
현재 혈액 값 : 98- 현재 힘 값 : 82
보스를 계속 공격하십시오 ...
현재 혈액 값 : 95- 현재 힘 값 : 76
보스를 계속 공격하십시오 ...
현재 혈액 값 : 88- 현재 힘 값 : 68
보스를 계속 공격하십시오 ...
현재 혈액 값 : 81- 현재 힘 값 : 64
보스를 계속 공격하십시오 ...
현재 혈액 값 : 76- 현재 힘 값 : 64
보스를 계속 공격하십시오 ...
현재 혈액 값 : 67- 현재 힘 값 : 64
축하합니다, 당신은 보스에게 성공적으로 도전했습니다!
III. 이 패턴의 디자인 원리
1. 패키지의 경계 유지
보안을 보장하기위한 2 듀얼 인터페이스 구현.
4. 행사를 사용하십시오
1 특정 순간에 물체의 이전 상태를 복원해야 할 때.
2. 화이트 박스 메모 모드에서는 외부에서 특정 순간에 객체의 상태를 저장해야하지만 인터페이스를 사용하여 다른 객체가 이러한 상태를 직접 얻을 수 있도록하는 경우 객체의 구현 세부 사항을 노출시키고 객체의 캡슐화를 파괴합니다.
3 블랙 박스 메모 모드 구현은 듀얼 인터페이스 액세스 메커니즘을 제공하여 개 개체에 대한 넓은 인터페이스를 제공하고 개시기 이외의 객체에 대한 좁은 인터페이스를 제공하여 캡슐화 및 보안을 효과적으로 해결합니다.
V. 정적 클래스 다이어그램
1 흰색 상자 메모 모드 정적 클래스 다이어그램
2 블랙 박스 메모 모드 정적 클래스 다이어그램
더 많은 Java 관련 컨텐츠를 보려면이 사이트에 관심이있는 독자는 "Java 데이터 구조 및 알고리즘 자습서", "Java Operation Dom Node Tips 요약", "Java 파일 및 디렉토리 작동 팁 요약 및"Java Cache Cache Operation Tips "의 주제를 볼 수 있습니다.
이 기사가 모든 사람의 Java 프로그래밍에 도움이되기를 바랍니다.