> Java > java지도 시간 > Java의 Memento 디자인 패턴 이해

Java의 Memento 디자인 패턴 이해

王林
풀어 주다: 2024-07-24 16:06:57
원래의
492명이 탐색했습니다.

Understanding the Memento Design Pattern in Java

문제

Memento 패턴은 캡슐화를 위반하지 않고 객체의 내부 상태를 캡처하고 복원해야 하는 필요성을 해결합니다. 이는 실행 취소/다시 실행 기능을 구현하여 객체를 이전 상태로 되돌리려는 시나리오에서 유용합니다.

해결책

Memento 패턴에는 세 가지 주요 구성 요소가 포함됩니다.

  1. Originator: 내부 상태를 저장하고 복원해야 하는 객체입니다.
  2. 메멘토: 원본의 내부 상태를 저장하는 개체입니다. 기념품은 불변입니다.
  3. 관리자: 작성자에게 기념품의 상태를 저장하거나 복원하도록 요청하는 역할을 담당합니다.

발신자는 현재 상태의 스냅샷이 포함된 기념품을 만듭니다. 이 기념품은 관리자가 저장하고 필요할 때 작성자의 상태를 복원하는 데 사용할 수 있습니다.

장점과 단점

장점

  • 캡슐화 유지: 구현 세부 정보를 노출하지 않고 개체의 내부 상태를 저장하고 복원할 수 있습니다.
  • 간단한 실행 취소/다시 실행: 실행 취소/다시 실행 기능 구현을 촉진하여 시스템을 더욱 강력하고 사용자 친화적으로 만듭니다.
  • 상태 기록: 객체의 이전 상태 기록을 유지하여 여러 상태 간 탐색을 가능하게 합니다.

단점

  • 메모리 소비: 여러 개의 기념품을 저장하면 특히 개체의 상태가 큰 경우 상당한 메모리를 소비할 수 있습니다.
  • 추가 복잡성: 기념품 생성 및 복원을 관리해야 하므로 코드가 더욱 복잡해집니다.
  • 관리인의 책임: 관리인은 기념품을 효율적으로 관리해야 하며, 이로 인해 시스템에 책임과 복잡성이 가중될 수 있습니다.

실제 적용 사례

Memento 패턴의 실제 예는 실행 취소/다시 실행 기능을 제공하는 텍스트 편집기에 있습니다. 문서의 각 변경 사항은 기념품으로 저장될 수 있으므로 사용자는 필요에 따라 문서의 이전 상태로 되돌릴 수 있습니다.

Java의 예제 코드

코드의 메모 패턴:

// Originator
public class Editor {
    private String content;

    public void setContent(String content) {
        this.content = content;
    }

    public String getContent() {
        return content;
    }

    public Memento save() {
        return new Memento(content);
    }

    public void restore(Memento memento) {
        content = memento.getContent();
    }

    // Memento
    public static class Memento {
        private final String content;

        public Memento(String content) {
            this.content = content;
        }

        private String getContent() {
            return content;
        }
    }
}

// Caretaker
public class History {
    private final Stack<Editor.Memento> history = new Stack<>();

    public void save(Editor editor) {
        history.push(editor.save());
    }

    public void undo(Editor editor) {
        if (!history.isEmpty()) {
            editor.restore(history.pop());
        }
    }
}

// Client code
public class Client {
    public static void main(String[] args) {
        Editor editor = new Editor();
        History history = new History();

        editor.setContent("Version 1");
        history.save(editor);
        System.out.println(editor.getContent());

        editor.setContent("Version 2");
        history.save(editor);
        System.out.println(editor.getContent());

        editor.setContent("Version 3");
        System.out.println(editor.getContent());

        history.undo(editor);
        System.out.println(editor.getContent());

        history.undo(editor);
        System.out.println(editor.getContent());
    }
}
로그인 후 복사

위 내용은 Java의 Memento 디자인 패턴 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿