메멘토 패턴은 캡슐화를 파괴하지 않고 객체의 내부 상태를 캡처하고 저장할 수 있도록 하는 동작 설계 패턴이며, 나중에 객체를 이전 상태로 복원할 수 있습니다. 이 패턴의 핵심은 Memento 클래스입니다. Java에서 Memento 패턴은 Memento 클래스를 정의하여 구현할 수 있습니다. Memento 클래스에는 일반적으로 저장된 객체의 내부 상태를 저장하는 하나 이상의 비공개 필드가 포함되어 있습니다. 또한 이러한 필드를 가져오고 설정하는 공개 메서드를 제공합니다. 원본 개체는 메모 클래스를 사용하여 메모를 생성하고 이를 기록에 저장할 수 있습니다. 개체의 상태를 복원해야 할 경우 원본 개체는 기록에서 메모를 가져오고 메모를 사용하여 상태를 복원하세요.
메모 모드에서는 일반적으로 다음 세 가지 역할이 관련됩니다.
Implementation
@Data public class Memento { /** * 攻击力 */ private int attack; /** * 防御力 */ private int defense; /** * 生命值 */ private int hp; public Memento(int attack, int defense, int hp) { this.attack = attack; this.defense = defense; this.hp = hp; } }
Initiate Human
@Data public class Role { /** * 攻击力 */ private int attack; /** * 防御力 */ private int defense; /** * 生命值 */ private int hp; public Role(int attack, int defense, int hp) { this.attack = attack; this.defense = defense; this.hp = hp; } /** * 将当前对象储存值Memento中 * @return */ public Memento save(){ return new Memento(attack,defense,hp); } /** * 从memento中获取状态;并恢复到当前状态 * @param memento */ public void restore(Memento memento){ attack = memento.getAttack(); defense = memento.getDefense(); hp = memento.getHp(); } }
public class Caretaker { private List<Memento> mementos = new ArrayList<>(); public void addMemento(Memento m){ mementos.add(m); } public Memento getMemento(int index){ return mementos.get(index); } }
public class Demo { public static void main(String[] args) { Role role = new Role(100,50,20); Caretaker caretaker = new Caretaker(); Memento memento = role.save(); caretaker.addMemento(memento); // 攻击力+10 role.setAttack(role.getAttack()+10); System.out.println(JSON.toJSONString(role)); // 恢复 role.restore(caretaker.getMemento(0)); System.out.println(JSON.toJSONString(role)); } }이것은 메모 패턴의 완전한 예입니다. 이 예에서는 캐릭터의 공격력, 방어력을 저장하는 메모 클래스 Memento를 만듭니다. 또한 캐릭터의 상태를 저장하고 복원할 수 있는 캐릭터 클래스인 Role을 생성했으며, 마지막으로 Memento 객체를 저장하는 데 사용되는 Caretaker 클래스를 생성하여 이를 조합하여 구현했습니다.
요약
장점
이 모드는 구현이 간단하고 이해 및 사용이 쉽습니다.
위 내용은 Java 메모 패턴을 활용하여 객체 상태를 저장하고 복원하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!