메모 모드
메멘토 패턴은 객체의 특정 상태를 저장하여 적절한 시점에 객체를 복원할 수 있도록 합니다. 메모 모드는 행동 모드입니다.
Introduction
의도: 객체의 내부 상태를 캡처하고 캡슐화를 파괴하지 않고 이 상태를 객체 외부에 저장합니다.
주요 솔루션: 메모 모드는 개체의 내부 상태를 캡처하고 캡슐화를 파괴하지 않고 이 상태를 개체 외부에 저장하여 나중에 개체를 원래 저장된 상태로 복원할 수 있도록 하는 것입니다.
사용 시기: 항상 개체의 내부 상태를 기록해야 하는 경우가 많습니다. 이 작업의 목적은 사용자가 불확실하거나 잘못된 작업을 취소하고 원래 상태로 복원하여 "후회"하도록 하는 것입니다. 약" "먹을 수 있어요.
해결 방법: 메모 클래스를 통해 객체 상태를 특별히 저장합니다.
키 코드: 클라이언트는 메모 클래스와 결합되지 않고 메모 관리 클래스와 결합됩니다.
적용예: 1. 후회약. 2. 게임을 하는 동안 파일을 저장하세요. 3. Windows에서는 ctri + z. 4. IE로 돌아갑니다. 4. 데이터베이스 트랜잭션 관리.
장점: 1. 사용자에게 상태 복원 메커니즘을 제공하여 사용자가 더 편리하게 특정 과거 상태로 돌아갈 수 있도록 합니다. 2. 사용자가 상태를 저장하는 세부 사항에 신경 쓸 필요가 없도록 정보 캡슐화가 실현됩니다.
단점: 자원 소비. 클래스에 멤버 변수가 너무 많으면 필연적으로 상대적으로 큰 리소스를 차지하게 되며 저장할 때마다 일정량의 메모리가 소비됩니다.
사용 시나리오: 1. 데이터를 저장/복원해야 하는 관련 상태 시나리오. 2. 롤백 작업을 제공합니다.
주의 사항: 1. Dimit 원칙을 준수하려면 관리 메모 클래스를 추가해야 합니다. 2. 메모리 절약을 위해 프로토타입 모드 + 메모 모드를 사용할 수 있습니다.
3개의 클래스
Memento, Originator 및 CareTaker를 사용하여 메모 패턴을 구현합니다. Memento에는 복원할 개체의 상태가 포함되어 있습니다. Originator는 Memento 객체에 상태를 생성하고 저장합니다. Caretaker 객체는 Memento에서 객체의 상태를 복원하는 일을 담당합니다.
MementoPatternDemo, 데모 클래스에서는 CareTaker 및 Originator 개체를 사용하여 개체의 상태 복원을 표시합니다.
1단계
메멘토 클래스를 만듭니다.
Memento.java
public class Memento { private String state; public Memento(String state){ this.state = state; } public String getState(){ return state; } }
2단계
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(); } }
3단계
CareTaker 클래스를 생성합니다.
CareTaker.java
import java.util.ArrayList; import java.util.List; public class CareTaker { private List<Memento> mementoList = new ArrayList<Memento>(); public void add(Memento state){ mementoList.add(state); } public Memento get(int index){ return mementoList.get(index); } }
4단계
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()); } }
5단계
출력을 확인합니다.
rreee