디자인 모드 - Memento 비망록 모드


디자인 모드 - Memento 비망록 모드
패 키 징 을 파괴 하지 않 는 전제 에서 대상 의 내부 상 태 를 포착 하고 이 대상 외 에 이 상 태 를 저장 합 니 다.이렇게 하면 이 대상 을 원래 저장 하기 전의 상태 로 복원 할 수 있다.
1. 패턴 정의:
패 키 징 을 파괴 하지 않 는 전제 에서 대상 의 내부 상 태 를 포착 하고 이 대상 외 에 이 상 태 를 저장 합 니 다.이렇게 하면 이 대상 을 원래 저장 하기 전의 상태 로 복원 할 수 있다.
2. 모델 해설
프로그램 이 실행 되 는 과정 에서 일부 대상 의 상 태 는 전환 과정 에 있 습 니 다. 어떤 이유 로 프로그램 이 특정한 단계 로 실 행 될 수 있 도록 이 대상 의 상 태 를 저장 해 야 할 수도 있 습 니 다. 대상 이 되 기 전에 특정한 점 에 있 을 때의 상 태 를 회복 해 야 합 니 다.일부 공유 인 터 페 이 스 를 사용 해 다른 대상 에 게 대상 의 상 태 를 얻 게 하면 대상 의 실현 디 테 일 을 드 러 낼 수 있다.
3. 구성 도
 1) 비망록 (Memento) 캐릭터: 비망록 캐릭터 는 '비망록 발기 캐릭터' 의 내부 상 태 를 저장 합 니 다.'메모 발기 캐릭터' 는 필요 에 따라 비망록 캐릭터 가 '메모 발기 캐릭터' 의 내부 상 태 를 저장 하 는 지 결정 한다.'메모 발기인' 이외 의 다른 대상 이 비망록 에 접근 하 는 것 을 방지 하기 위해 서다.비망록 은 실제로 두 개의 인터페이스 가 있 는데 '비망록 관리자 역할' 은 비망록 이 제공 하 는 좁은 인터페이스 만 볼 수 있다. 비망록 역할 에 저 장 된 속성 은 보이 지 않 는 다.'메모 발기 캐릭터' 는 비망록 캐릭터 에 넣 을 수 있 는 넓 은 인 터 페 이 스 를 볼 수 있다.
2) 메모 시작 (Originator) 캐릭터: "메모 시작 캐릭터" 는 현재 시각 내부 상 태 를 기록 하기 위해 비망록 을 만 듭 니 다.필요 할 때 비망록 을 사용 하여 내부 상 태 를 회복 합 니 다.
 3) 비망록 관리자 (Caretaker) 역할: 비망록 을 잘 보관 하 는 것 을 책임 진다.비망록 의 내용 을 조작 하거나 검사 할 수 없습니다.
넷 째, 하나의 예
 이 예 는 내 가 인터넷 에서 찾 은 것 이다. 나 는 그것 이 비교적 형상 적 이 라 고 생각 하여 가 져 와 서 직접 사용 했다.다음은 이 예 의 코드 입 니 다.class WindowsSystem{
private String state;
public Memento createMemento(){ //
 return new Memento(state);
}
public void restoreMemento(Memento m){ //
 this.state=m.getState();
}
public String getState() {
 return state;
}
public void setState(String state) {
 this.state = state;
 System.out.println(" "+this.state);
}
}
class Memento{
private String state;
public Memento(String state) {
 this.state = state;
}
public String getState() {
 return state;
}
public void setState(String state) {
 this.state = state;
}
}
class User{
private Memento memento;
public Memento retrieveMemento() { //
   return this.memento;
}
public void saveMemento(Memento memento){ //
   this.memento=memento;
}
}
  
public class Test{
  
public static void main(String[] args) {
  WindowsSystem Winxp = new WindowsSystem(); //Winxp
  User user = new User();  //
  Winxp.setState(" ");  //Winxp
  user.saveMemento(Winxp.createMemento()); // ,Winxp
  Winxp.setState(" ");  //Winxp
  Winxp.restoreMemento(user.retrieveMemento());  // ,
  System.out.println(" "+Winxp.getState());
 }
  
}
이 사례 에서 윈도 시스템 은 발기인 역할 (Orignation) 이 고, 메 멘 토 는 비망록 역할 (Memento) 이 며, 유 저 는 비망록 관리 역할 (Caretaker) 이다.Memento 는 두 개의 인 터 페 이 스 를 제공 합 니 다. (여기 인 터 페 이 스 는 자바 의 인터페이스 가 아 닙 니 다. 외부 에서 호출 할 수 있 는 방법 을 말 합 니 다) 하 나 는 윈도 시스템 류 의 넓 은 인 터 페 이 스 를 위 한 것 입 니 다. 윈도 시스템 에 Memento 를 넣 을 수 있 는 state 속성 을 얻 을 수 있 습 니 다. 코드 는 윈도 시스템 의 createMemento 방법 과 restoreMemento 방법 을 볼 수 있 습 니 다. createMemento 방법 은 Memento 에 state 속성 을 넣 습 니 다.restoreMemento 방법 으로 넣 은 state 속성 을 얻 을 수 있 습 니 다.다른 하 나 는 User 클래스 에 제공 하 는 좁은 인터페이스 로 Memento 만 관리 할 수 있 고 그 내용 에 대해 어떠한 조작 도 할 수 없습니다 (User 클래스 참조).
장단 점
 1) 패 키 징 경 계 를 유지 하고 비망록 을 사용 하면 원 발 기 에서 만 관리 해 야 하지만 원 발 기 이외 의 정 보 를 노출 시 키 는 것 을 피 할 수 있다.이 모드 는 복잡 할 수 있 는 Originator 내부 정 보 를 다른 대상 에 차단 하여 패 키 징 경 계 를 유지 합 니 다.
 2) 이 는 원 발 기 가 다른 패 키 징 성 을 유지 하 는 디자인 에서 Originator 는 고객 이 요청 한 내부 상태 버 전 을 유지 하 는 것 을 간소화 했다.이것 은 모든 저장 관리의 중임 을 Originator 에 게 맡 겼 다.고객 이 요청 한 상 태 를 관리 하도록 하면 Originator 를 간소화 하고 고객 이 작업 이 끝 날 때 원 발 기 를 알 리 지 않 아 도 됩 니 다.
3) 비망록 을 사용 하 는 대가 가 매우 높 을 수 있 습 니 다. 만약 에 원 발 기 가 비망록 을 생 성 할 때 대량의 정 보 를 복사 하고 저장 해 야 하거나 고객 이 비망록 을 자주 만 들 고 원 발 기 상 태 를 회복 하면 큰 비용 이 들 수 있 습 니 다.Originator 상 태 를 패키지 하고 복구 하 는 데 비용 이 많이 들 지 않 는 한 이 모델 은 적합 하지 않 을 수 있 습 니 다.
4) 비망록 을 지 키 는 잠재 적 인 대가 관리 자 는 비망록 을 삭제 하 는 것 을 책임 진다.그러나 관리 자 는 비망록 에 몇 개의 상태 가 있 는 지 모른다.따라서 비망록 을 저장 할 때 원래 아주 작은 관리자 가 대량의 저장 비용 을 발생 시 킬 수 있다.
적용 성
1) 대상 이 어느 순간 (부분) 상 태 를 저장 해 야 나중에 필요 할 때 이전 상태 로 돌아 갈 수 있 습 니 다.
2) 하나의 인터페이스 로 다른 대상 이 이러한 상 태 를 직접 얻 게 하면 대상 의 세부 사항 을 폭로 하고 대상 의 포장 성 을 파괴 할 수 있다.

좋은 웹페이지 즐겨찾기