디자인 모드 (20) 의 비망록 모드

2853 단어
비망록 모드 (Memento Pattern) 는 업무 가 필요 할 때 대상 을 복구 할 수 있 도록 대상 의 과거 기록 데이터 백업 을 저장 합 니 다.Windows 의 ctrl + z, Idea 의 후퇴 기능 은 모두 비망록 모델 의 구체 적 인 표현 이다.
1. 수요 예:
프로젝트 코드 개발 에 서 는 후퇴 기능 (즉 ctrl + z 기능) 을 자주 사용 하여 코드 의 이전 버 전 으로 복원 합 니 다.비망록 류 는 역사 버 전의 데 이 터 를 저장 하고 비망록 관리 류 는 비망록 을 관리 하 며 그 중에서 역사 버 전의 데 이 터 를 복원 합 니 다. 작성 자 류 는 코드 를 작성 하고 데 이 터 를 비망록 에 저장 합 니 다.
2. 유형 도:
3. 코드 인 스 턴 스:
1. 코드 비망록 류: Codemento
package com.lance.memento;

public class CodeMemento {
    private String previousCode;


    public String getPreviousCode() {
        return previousCode;
    }

    public CodeMemento(String previousCode) {
        this.previousCode = previousCode;
    }
}


2. 코드 작성 자 클래스: CodeOriginator
package com.lance.memento;

public class CodeOriginator {
    private String currentCode;

    public String getCurrentCode() {
        return currentCode;
    }

    public void setCurrentCode(String currentCode) {
        this.currentCode = currentCode;
    }

    public CodeMemento createCodeMemento() {
        return new CodeMemento(currentCode);
    }

    public void setCodeMemento(CodeMemento codeMemento) {
        this.currentCode = codeMemento.getPreviousCode();
    }

    public void show() {
        System.out.println("current code:" + this.currentCode);
    }
}


3. 비망록 관리 유형: CodeCareTaker, Memento 에서 회복 대상 을 책임 집 니 다.
package com.lance.memento;

public class CodeCareTaker {

    private CodeMemento codeMemento;

    public CodeMemento getCodeMemento() {
        return codeMemento;
    }

    public void setCodeMemento(CodeMemento codeMemento) {
        this.codeMemento = codeMemento;
    }
}


4. 주 클래스:
package com.lance.memento;

public class MementoPattern {


    public static void main(String[] args) {


        System.out.println("==========start==========");

        CodeOriginator codeOriginator = new CodeOriginator();
        codeOriginator.setCurrentCode("Java Hello World!");

        System.out.println("step 1:");
        codeOriginator.show();

        CodeCareTaker codeCareTaker = new CodeCareTaker();
        codeCareTaker.setCodeMemento(codeOriginator.createCodeMemento());

        codeOriginator.setCurrentCode("Java Spring!");
        System.out.println("step 2:");
        codeOriginator.show();

        codeOriginator.setCodeMemento(codeCareTaker.getCodeMemento());

        System.out.println("rollback:");
        codeOriginator.show();
        System.out.println("==========end==========");

    }
}


출력 결과:
==========start==========
step 1:
current code:Java Hello World!
step 2:
current code:Java Spring!
rollback:
current code:Java Hello World!
==========end==========

좋은 웹페이지 즐겨찾기