备忘录模式示例代码提交

This commit is contained in:
xuwujing
2018-11-22 16:29:42 +08:00
parent 41d29b5b98
commit 2bad92321d

View File

@@ -1,12 +1,9 @@
package com.pancm.design.memento;
import java.util.ArrayList;
import java.util.List;
/**
* @Title: MementoTest
* @Description:
备忘录模式 备忘录模式Memento Pattern保存一个对象的某个状态以便在适当的时候恢复对象。备忘录模式属于行为型模式。
* @Description: 备忘录模式
备忘录模式Memento Pattern保存一个对象的某个状态以便在适当的时候恢复对象。备忘录模式属于行为型模式。
核心: 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
* @Version:1.0.0
* @author pancm
@@ -24,24 +21,8 @@ public class MementoTest {
基本角色:备忘录(Memento)角色、发起人(Originator)角色、负责人(Caretaker)角色。
1.备忘录(Memento):主要的功能是包含要被恢复的对象的状态。
2.发起人(Originator):在创建的时候,会在备忘录对象中存储状态。
3.负责人(Caretaker):主要是负责从 备忘录对象中恢复对象的状态。
3.负责人(Caretaker):主要是负责从备忘录对象中恢复对象的状态。
*/
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());
/*
* 使用
* 常见场景就是游戏存档,电脑中的 Ctrl+Z撤销功能
@@ -120,59 +101,6 @@ public class MementoTest {
}
}
/*
* 创建一个备忘录
*/
class Memento {
private String state;
public Memento(String state) {
this.state = state;
}
public String getState() {
return state;
}
}
/*
* 设置一个起因
*/
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();
}
}
/*
* 设置一个看门者
*/
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);
}
}
//创建一个存档 信息(备忘录)
@@ -215,8 +143,6 @@ class Player {
this.level = level;
this.life = life;
}
//保存信息
public SaveMsg saveStateToMemento() {
return new SaveMsg(level,life);