디자인 모드 - 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) 하나의 인터페이스 로 다른 대상 이 이러한 상 태 를 직접 얻 게 하면 대상 의 세부 사항 을 폭로 하고 대상 의 포장 성 을 파괴 할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디자인 모델 의 공장 모델, 단일 모델자바 는 23 가지 디자인 모델 (프로 그래 밍 사상/프로 그래 밍 방식) 이 있 습 니 다. 공장 모드 하나의 공장 류 를 만들어 같은 인 터 페 이 스 를 실현 한 일부 종 류 를 인 스 턴 스 로 만 드 는 것...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.