행동 형 모드 - 비망록 모드

6887 단어 디자인 모드
개술
비망록 모드 (Memento Pattern) 는 대상 의 상 태 를 적당 한 시기 에 복원 할 수 있 도록 저장 합 니 다.비망록 모드 는 행위 형 모드 에 속한다.
소개 하 다.
의도
패 키 징 성 을 파괴 하지 않 는 전제 에서 대상 의 내부 상 태 를 포착 하고 이 대상 외 에 이 상 태 를 저장 합 니 다.
주요 해결
비망록 모드 란 패 키 지 를 파괴 하지 않 는 전제 에서 한 대상 의 내부 상 태 를 포착 하고 이 대상 외 에 이 상 태 를 저장 하 는 것 으로 나중에 대상 을 원래 저 장 된 상태 로 복원 할 수 있다.
언제
많은 경우 에 우 리 는 항상 한 대상 의 내부 상 태 를 기록 해 야 한다. 이렇게 하 는 목적 은 사용자 가 불확실 하거나 잘못된 조작 을 취소 하고 원래 의 상태 로 회복 하여 그 가 '후회 약' 을 먹 을 수 있 도록 하 는 것 이다.
어떻게 해결 합 니까?
비망록 류 를 통 해 대상 상 태 를 전문 적 으로 저장 합 니 다.
키 코드
고객 은 비망록 류 와 결합 하지 않 고 비망록 관리 류 와 결합 합 니 다.
응용 실례
  • 후회 하 는 약
  • 게임 할 때의 압축 파일
  • Windows 의 ctri z
  • IE 중 후퇴
  • 데이터베이스 의 사무 관리
  • 장점.
  • 사용자 에 게 상 태 를 회복 할 수 있 는 체 제 를 제공 하여 사용자 가 특정한 역사적 인 상태 로 비교적 편리 하 게 돌아 갈 수 있 도록 한다
  • .
  • 정보의 패 키 징 을 실현 하여 사용자 가 상태의 저장 디 테 일 에 관심 을 가지 지 않 아 도 된다
  • .
    결점.
    자원 을 소모 하 다.만약 에 클래스 의 구성원 변수 가 너무 많 으 면 비교적 큰 자원 을 차지 하고 저장 할 때마다 일정한 메모 리 를 소모 할 것 이다.
    필드 사용
  • 데 이 터 를 저장 / 복원 해 야 하 는 관련 상태 장면
  • 스크롤 백 가능 한 동작 제공
  • 주의 사항
  • 디 미트 원칙 에 부합 하기 위해 관리 비망록 류
  • 를 추가 해 야 한다.
  • 메모리 절약 을 위해 원형 모드 비망록 모드
  • 를 사용 할 수 있 습 니 다.
    Demo
    비망록 모드 는 세 가지 종류의 Memento, Originator, CareTaker 를 사용한다.메 멘 토 는 회복 할 대상 의 상 태 를 담 고 있다.Originator 는 Memento 대상 에 상 태 를 만 들 고 저장 합 니 다.케 어 테 이 커 대상 은 메 멘 토 에서 대상 의 상 태 를 회복 하 는 역할 을 한다.Memento PatternDemo, 우리 의 프 리 젠 테 이 션 클래스 는 CareTaker 와 Originator 대상 을 사용 하여 대상 의 상태 회복 을 표시 합 니 다.
    Memento 클래스 만 들 기
  • Memento.java
  • public class Memento {
       private String state;
    
       public Memento(String state){
          this.state = state;
       }
    
       public String getState(){
          return state;
       }    
    }

    Originator 클래스 만 들 기
  • Originator.java
  • public class Originator {
       private String state;
    
       public void setState(String state){
          this.state = state;
       }
    
       public String getState(){
          return state;
       }
    
       public Memento saveStateToMemento(){
          return new Memento(state);
       }
    
       public void getStateFromMemento(Memento Memento){
          state = Memento.getState();
       }
    }

    CareTaker 클래스 만 들 기
  • CareTaker.java
  • import java.util.ArrayList;
    import java.util.List;
    
    public class CareTaker {
       private List mementoList = new ArrayList();
    
       public void add(Memento state){
          mementoList.add(state);
       }
    
       public Memento get(int index){
          return mementoList.get(index);
       }
    }

    CareTaker 와 Originator 대상 사용 하기
  • MementoPatternDemo.java
  • public class MementoPatternDemo {
       public static void main(String[] args) {
          Originator originator = new Originator();
          CareTaker careTaker = new CareTaker();
          originator.setState("State #1");
          originator.setState("State #2");
          careTaker.add(originator.saveStateToMemento());
          originator.setState("State #3");
          careTaker.add(originator.saveStateToMemento());
          originator.setState("State #4");
    
          System.out.println("Current State: "   originator.getState());        
          originator.getStateFromMemento(careTaker.get(0));
          System.out.println("First saved State: "   originator.getState());
          originator.getStateFromMemento(careTaker.get(1));
          System.out.println("Second saved State: "   originator.getState());
       }
    }

    출력 검증
    Current State: State #4
    First saved State: State #2
    Second saved State: State #3

    총결산
    비망록 모델 의 본질은 백업 메커니즘 이다. 그 사고방식 은 대상 의 상 태 를 사용자 가 필요 로 할 때 백업 하 는 것 이다. 상태 가 되 돌아 갈 때 대상 의 상 태 를 이전 백업 상태 로 복원 하 는 것 이다. 우리 가 자주 사용 하 는 git 버 전 제어 관리 시스템 은 사실은 특수 한 비망록 모델 이다.필요 할 때 창 고 를 백업 하면 후기 개발 에서 이전에 백업 한 창고 상 태 를 수시로 찾 을 수 있 습 니 다. 그러나 주의해 야 할 것 은 비망록 모델 의 종점 은 대상 입 니 다. 그 진정한 목적 은 하나의 대상 의 상 태 를 저장 하 는 것 입 니 다. 다른 상태 백업 은 그 중심 이 아 닙 니 다.

    좋은 웹페이지 즐겨찾기