Memento パターンは、カプセル化に違反することなくオブジェクトの内部状態をキャプチャして復元する必要性に対処します。これは、オブジェクトを以前の状態に戻すことができる、元に戻す/やり直し機能を実装するシナリオで役立ちます。
Memento パターンには 3 つの主要なコンポーネントが含まれます:
作成者は、現在の状態のスナップショットを含む記念品を作成します。この記念品は管理者によって保管され、必要なときに作成者の状態を復元するために使用できます。
Memento パターンの実際的な例は、元に戻す/やり直し機能を提供するテキスト エディターにあります。ドキュメントへの各変更は記念として保存できるため、ユーザーは必要に応じてドキュメントの以前の状態に戻すことができます。
コード内のメモ パターン:
// 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 Stackhistory = 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()); } }
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3