1. 정의
캡슐화를 파괴하지 않고 객체의 내부 상태를 포착 하고이 상태를 물체 외부에 저장하십시오. 이런 식으로 객체는 나중에 원래 저장 상태로 복원 할 수 있습니다.
2. 사용 이유
어느 시점에서 물체의 원래 상태를 복원하고 싶습니다.
3. 해당 상황의 예
메모 모드의 많은 응용 프로그램이 있지만 우리는 그것을 보았지만 신중하게 생각하지 않았습니다. 이것은 메모 모드를 사용하는 것입니다. 몇 가지 예를 들어 드리겠습니다.
EG1. JSP+Javabean에서 메모 사용 :
시스템에 계정을 추가 할 때는 양식의 사용자 이름, 비밀번호, 연락처, 주소 및 기타 정보를 작성해야합니다. 일부 필드가 채워지지 않았거나 잘못 채워지는 경우 사용자가 "제출"버튼을 클릭하면 새 페이지에서 사용자가 입력 한 옵션을 저장하고 잘못된 옵션을 프롬프트해야합니다. 이것은 Javabean의 scope = "request"또는 scope = "session"특성을 사용하여 달성됩니다. 즉, 메모 모드를 사용하여 달성됩니다.
EG2. 차 브레이크를 수리 할 때. 먼저 양쪽의 배플을 제거하여 왼쪽 및 오른쪽 브레이크 패드를 노출시킵니다. 하나의 조각 만 제거 할 수 있고 다른 조각은 브레이크 설치 방법을 나타내는 메모 역할을합니다. 이 조각의 수리가 완료된 후에 만 다른 조각을 제거 할 수 있습니다. 두 번째 조각이 제거되면 첫 번째 조각은 메모가됩니다.
EG3. 인생에서 구입할 후회 의약은 없다고한다. 우리는 모두 우리가하는 일에 대한 가격을 지불하고 있지만 부드러운 세상에는 "후회 의학"이 있습니다. 특정 상태를 변경 한 후에는 이전의 특정 상태를 저장하는 한 메모 모드를 통해 사물의 상태를 복원 할 수 있습니다. 사실, 이것은 또한 시간을 되돌릴 수있는 "Moonlight Treasure Box"이며 "Magic"이라는 단어는 놀랍습니다.
4. 클래스 다이어그램 구조 및 설명
(1) 클래스 다이어그램은 다음과 같습니다.
(2) 수업 설명 (i) Memento : 각서 역할, 주요 작업은 다음과 같습니다.
개 개체의 내부 상태를 저장하십시오.
원문자 객체 이외의 객체에 의해 컨텐츠가 읽지 않도록 보호 할 수 있습니다.
(ii) 창업자 : 스폰서의 역할은 주로 다음 과제를 완료합니다.
현재 내부 상태로 메모 객체를 만듭니다.
메모 개체를 사용하여 내부 상태를 저장하십시오.
(iii) 간병인 : 담당자, 작업은 다음과 같이 완료됩니다.
각서 대상을 보존하는 책임;
메모 객체의 내용은 저장되지 않습니다.
5. 예
/ *** 데이터 객체*/ public class datastate {private String action; public void setAction (String action) {this.action = action; } public String getAction () {return action; }} /*** 다른 객체의 내부 상태의 사본을 저장하는 객체. 이런 식으로, 객체는 향후 원래 저장 상태로 복원 될 수 있습니다. */ import java.io.file; java.io.serializable import; 공개 클래스 메모토는 직렬화 가능 { /*개인 int 번호를 구현합니다. 개인 파일 파일 = null; public memento (originator o) {this.number = o.getNumber (); this.file = O.getFile (); } public int getNumber () {return this.Number; } public void setNumber (int number) {this.number = 숫자; } public file getFile () {return this.file; } public void setfile (파일 파일) {this.file = 파일; } */ 개인 데이터 스테이트 상태; public memento (창업자 o) {this.state = o.getState (); } public datastate getState () {return state; } public void setstate (Datastate State) {this.state = state; }} 공개 클래스 제작자 { /* private int 번호; 개인 파일 파일 = null; Public Goreator () {} // Memento를 만들어 Public Memento로 전달하여 public memento getmemento () {return new memento (this); } // Memento에서 저장된 데이터를 꺼내 원래 상태 공개 void setmemento (memento m) {number = m.getNumber (); file = m.getfile (); } public int getNumber () {반환 번호; } public void setNumber (int number) {this.number = 숫자; } public file getFile () {return file; } public void setfile (파일 파일) {this.file = 파일; }*/ 개인 데이터 스테이트 상태; 공개 원가지 () {} 공개 창업자 (Datastate State) {this.state = state; } // memento를 만들어 public memento로 공개 memento로 전달합니다. public memento getmemento () {return new memento (this); } // memento에서 저장된 데이터를 가져 와서 원래 상태 공개 void setmemento (memento m)로 복원하십시오 { / * * getMemento ()가 만든 객체는 컨테이너에 저장됩니다. * 복원해야 할 때는 현재 메소드로 전달한 다음 getState ()를 사용하여 */ this.state = M.getState (); } public datastate getState () {return state; } public void setstate (Datastate State) {this.state = state; }} /** 독창성은 데이터를로드하고 Memento 객체를 만들고 memento*/ public class test {public static void main (string [] args) {// originator ustoryator = new originator ()를 통해 원래 데이터를 복원하는 데 사용됩니다. // originator.setNumber (8); // // memento memento = originator.getMemento (); // system.out.println (memento.getNumber ()); DataState State = New Datastate (); state.setAction ( "캐릭터 복사"); 창업자 원시자 = 새로운 원문자 (); System.out.println ( "원래 데이터 만들기"); originator.setstate (state); System.out.println ( "메모 대상 생성, 원래 데이터 상태 저장"); memento memento = originator.getMemento (); System.out.println ( "새 데이터 만들기"); originator.setstate (new Datastate ()); System.out.println ( "새 데이터를 작성한 후 :" + originator.getState (). getAction ()); /** Memento는 특정 장소에 저장하고 내부에 저장된 데이터를 복원하기 위해 필요할 때 검색해야합니다.*/ system.out.println ( "새 데이터를 작성한 후 원래 데이터를 복원"); originator.setmemento (memento); System.out.println (originator.getState (). getAction ()); }}인쇄:
원래 데이터 생성 메모 객체 만들기, 원래 데이터 상태 저장 새 데이터 생성 새 데이터 생성 : NULL 새 데이터를 작성한 후 원래 데이터 복사 문자 복사