备忘录模式示例代码提交
This commit is contained in:
@@ -5,8 +5,8 @@ import java.util.List;
|
||||
|
||||
/**
|
||||
* @Title: MementoTest
|
||||
* @Description:
|
||||
备忘录模式 备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。
|
||||
* @Description: 备忘录模式
|
||||
备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。
|
||||
核心: 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
|
||||
* @Version:1.0.0
|
||||
* @author pancm
|
||||
@@ -24,24 +24,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 +104,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 +146,6 @@ class Player {
|
||||
this.level = level;
|
||||
this.life = life;
|
||||
}
|
||||
|
||||
|
||||
//保存信息
|
||||
public SaveMsg saveStateToMemento() {
|
||||
return new SaveMsg(level,life);
|
||||
|
||||
Reference in New Issue
Block a user