Latest web development tutorials

메멘토 패턴

메모 모드 (여고 패턴) 적절한 시간에 객체를 복원하기 위해 오브젝트의 상태를 저장한다. 각서 패턴의 행동 패턴을 속한다.

소개

의도 : 오브젝트의 내부 상태를 캡처 밀봉을 위반하고, 물체의 외부 상태를 저장없이.

주로 해결하려면 모델은 패키지를 파괴하지 않고 소위 각서는, 오브젝트의 내부 상태를 캡쳐하고, 개체가 나중에 이전에 저장된 상태로 복원 될 수 있도록 객체의 외부의 상태를 저장한다.

사용하는 경우 : 여러 번 우리는 항상 객체의 내부 상태를 기록 할 필요가 이렇게의 목적은 사용자가 불확실하거나 잘못된 작업을 취소 할 수 있도록하는 것입니다 그가 먹고 "후회"있다, 그래서 자신의 원래 상태로 복원 할 수 있습니다.

해결 방법 : 객체의 상태를 저장하도록 설계별로 메모.

키 코드 : 고객이 메모 관리 클래스와 결합 메모 클래스되지 커플을 수행.

적용 예 : 1, 나중에 후회.2, 게임 아카이브를 재생할 때. 3, 윈도우 레인 ctri + Z. 네, 뒤쪽에 IE. 도 4를 참조하면, 트랜잭션 관리 데이터베이스.

장점 : (1)는, 사용자가 상태의 과거로 복귀하는 것이 더 편리 할 수있는기구의 상태를 복원하는 방법을 제공한다.사용자가 상세의 보존 상태에 대해 우려하지 않아도되도록 2는 정보의 패키지를 달성했다.

단점 : 자원을 소비한다.너무 클래스의 멤버 변수 경우, 상대적으로 많은 자원을 차지하기 위해 결합하고, 저장 할 때마다 메모리의 일정 금액을 소모합니다.

사용 시나리오 : 1, 저장할 필요 / 장면 데이터의 관련 상태를 복원.도 2는 롤백 동작을 제공한다.

1 데메테르의 원리를 충족하기 위해, 또한 클래스 관리 메모를 추가참고.이 메모리를 절약하기 위해서는 원형 모델 + 메모 모드를 사용할 수있다.

실현

메모 모드는 세 가지 클래스메멘토,발신자와관리인을 사용합니다.개체가 포함 된 유품은 상태로 복원 할 수 있습니다. 발신자 기념물 객체 생성 및 상태에 저장됩니다. 관리인 객체는 메멘토 상태에서 개체를 복원 할 책임이있다.

MementoPatternDemo은관리인과주관자개체를 사용하여 우리의 데모 클래스는 객체 회복의 상태를 표시합니다.

각서 패턴 UML 다이어그램

1 단계

기념 클래스를 만듭니다.

Memento.java

공용 클래스 기념물 {
   개인 문자열 상태;

   공공 기념물 (문자열 상태) {
      this.state = 상태;
   }

   공공 문자열의 getState () {
      상태를 반환;
   }	
}

2 단계

발신자 클래스를 만듭니다.

Originator.java

공용 클래스 발신자 {
   개인 문자열 상태;

   공공 무효 setState를 (문자열 상태) {
      this.state = 상태;
   }

   공공 문자열의 getState () {
      상태를 반환;
   }

   공공 기념물 saveStateToMemento () {
      새로운 메멘토 (상태)을 반환;
   }

   공공 무효 getStateFromMemento (메멘토 메멘토) {
      상태 = Memento.getState ();
   }
}

3 단계

관리인 클래스를 만듭니다.

CareTaker.java

수입 인 java.util.ArrayList;
가져 오기를 java.util.List;

공용 클래스 관리인 {
   개인 목록 <메멘토> mementoList = 새로운 ArrayList를 <메멘토> ();

   공공 무효의 추가 (메멘토 상태) {
      mementoList.add (주);
   }

   공공 기념물 {(INT 지수) 취득
      mementoList.get (인덱스)를 반환;
   }
}

4 단계

관리인발신자개체를 사용합니다.

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 ());
   }
}

5 단계

출력을 확인합니다.

현재 상태 : 주 # 4
먼저 저장 주 : 주 # 2
두 번째 저장 주 : 주 # 3