최고의 메멘토 패턴 튜토리얼 2024년, 이 튜토리얼에서는 소개,실현,를 배울 수 있습니다.
메모 모드 (여고 패턴) 적절한 시간에 객체를 복원하기 위해 오브젝트의 상태를 저장한다. 각서 패턴의 행동 패턴을 속한다.
의도 : 오브젝트의 내부 상태를 캡처 밀봉을 위반하고, 물체의 외부 상태를 저장없이.
주로 해결하려면 모델은 패키지를 파괴하지 않고 소위 각서는, 오브젝트의 내부 상태를 캡쳐하고, 개체가 나중에 이전에 저장된 상태로 복원 될 수 있도록 객체의 외부의 상태를 저장한다.
사용하는 경우 : 여러 번 우리는 항상 객체의 내부 상태를 기록 할 필요가 이렇게의 목적은 사용자가 불확실하거나 잘못된 작업을 취소 할 수 있도록하는 것입니다 그가 먹고 "후회"있다, 그래서 자신의 원래 상태로 복원 할 수 있습니다.
해결 방법 : 객체의 상태를 저장하도록 설계별로 메모.
키 코드 : 고객이 메모 관리 클래스와 결합 메모 클래스되지 커플을 수행.
적용 예 : 1, 나중에 후회.2, 게임 아카이브를 재생할 때. 3, 윈도우 레인 ctri + Z. 네, 뒤쪽에 IE. 도 4를 참조하면, 트랜잭션 관리 데이터베이스.
장점 : (1)는, 사용자가 상태의 과거로 복귀하는 것이 더 편리 할 수있는기구의 상태를 복원하는 방법을 제공한다.사용자가 상세의 보존 상태에 대해 우려하지 않아도되도록 2는 정보의 패키지를 달성했다.
단점 : 자원을 소비한다.너무 클래스의 멤버 변수 경우, 상대적으로 많은 자원을 차지하기 위해 결합하고, 저장 할 때마다 메모리의 일정 금액을 소모합니다.
사용 시나리오 : 1, 저장할 필요 / 장면 데이터의 관련 상태를 복원.도 2는 롤백 동작을 제공한다.
1 데메테르의 원리를 충족하기 위해, 또한 클래스 관리 메모를 추가참고.이 메모리를 절약하기 위해서는 원형 모델 + 메모 모드를 사용할 수있다.
메모 모드는 세 가지 클래스메멘토,발신자와관리인을 사용합니다.개체가 포함 된 유품은 상태로 복원 할 수 있습니다. 발신자 기념물 객체 생성 및 상태에 저장됩니다. 관리인 객체는 메멘토 상태에서 개체를 복원 할 책임이있다.
MementoPatternDemo은관리인과주관자개체를 사용하여 우리의 데모 클래스는 객체 회복의 상태를 표시합니다.
기념 클래스를 만듭니다.
Memento.java
공용 클래스 기념물 { 개인 문자열 상태; 공공 기념물 (문자열 상태) { this.state = 상태; } 공공 문자열의 getState () { 상태를 반환; } }
발신자 클래스를 만듭니다.
Originator.java
공용 클래스 발신자 { 개인 문자열 상태; 공공 무효 setState를 (문자열 상태) { this.state = 상태; } 공공 문자열의 getState () { 상태를 반환; } 공공 기념물 saveStateToMemento () { 새로운 메멘토 (상태)을 반환; } 공공 무효 getStateFromMemento (메멘토 메멘토) { 상태 = Memento.getState (); } }
관리인 클래스를 만듭니다.
CareTaker.java
수입 인 java.util.ArrayList; 가져 오기를 java.util.List; 공용 클래스 관리인 { 개인 목록 <메멘토> mementoList = 새로운 ArrayList를 <메멘토> (); 공공 무효의 추가 (메멘토 상태) { mementoList.add (주); } 공공 기념물 {(INT 지수) 취득 mementoList.get (인덱스)를 반환; } }
관리인및발신자개체를 사용합니다.
MementoPatternDemo.java
공용 클래스 MementoPatternDemo { 공공 정적 무효 메인 (문자열 []에 args) { 발신자 발신자 = 새로운 주관자 (); 관리인 관리인 = 새로운 관리인 (); originator.setState ( "주 1"); originator.setState ( "주 # 2"); careTaker.add (originator.saveStateToMemento ()); originator.setState ( "주 3"); careTaker.add (originator.saveStateToMemento ()); originator.setState ( "주 # 4"); 에서 System.out.println ( "현재 상태 :"+ originator.getState ()); originator.getStateFromMemento (careTaker.get (0)); 에서 System.out.println ( "첫 번째 주를 저장 :"+ originator.getState ()); originator.getStateFromMemento (careTaker.get (1)); 에서 System.out.println ( "제 2 상태를 저장 :"+ originator.getState ()); } }
출력을 확인합니다.
현재 상태 : 주 # 4 먼저 저장 주 : 주 # 2 두 번째 저장 주 : 주 # 3