originator = new Originator(); System.out.println(originator.getState()); // 保存状态...(originator.getState()); // 恢复状态 originator.restoreByMemento(caretaker.getMemento())...originator = new Originator(); System.out.println(originator.getState()); Caretaker...originator = new Originator(); System.out.println(originator.getState()); originator.saveMemento...(); originator.setState("ON"); System.out.println(originator.getState()); originator.restoreMemento
originator = new Originator(); Memento mem = originator.createMemento(); originator.restoreMemento...(originator.createMemento()); originator.restoreMemento(caretaker.getMemento()); } } 这我没懂..._originator){ this.setState(_originator.getState()); } //克隆当前对象 @Override...protected Originator clone(){ try { return (Originator)super.clone();...originator = new Originator(); originator.createMemento(); originator.restoreMemento
它主要有三个角色: Originator用来描述一个需要被进行备忘录的对象,「它可以主动的创建一个备忘录,并且设置其状态」 Memento备忘录对象,用来保存Originator对象的状态,提供两个接口用于读取和设置对象的状态...originator ; public Caretaker(Originator originator){ this.originator = originator ;...void main(String[] args) { Originator originator = new Originator(); Caretaker caretaker...= new Caretaker(originator); //保存当前状态 Memento memento = caretaker.createMemento();...originator.setState("我的"); caretaker.createMemento(); } 有没有发现,这个设计模式强调了一个安全访问的原则,
class Originator { // For the sake of simplicity, the originator's state is stored inside a..._originator = null; public Caretaker(Originator originator) { this...._originator = originator; } public void Backup() { Console.WriteLine(...Originator originator = new Originator("Super-duper-super-puper-super."); Caretaker caretaker...: Saving Originator's state...Originator: I'm doing something important.Originator: and my state has
使用场景 主要角色 发起人 Originator 需要备份的对象 看管人 Caretaker 保存备份的容器 备忘录 Memento 备份对象 类图 示例代码 需要备份的对象 public class...Originator { private String state1; private String state2; private String staten; void...originator = new Originator(); // 创建负责人 Caretaker caretaker = new Caretaker();...// 设置发起人的状态 originator.setState1("State 1"); System.out.println("Current State: " + originator.getState1...修改发起人的状态 originator.setState1("State 2"); System.out.println("Updated State: " + originator.getState1
Memento(备忘录):存储Originator的内部状态。只有Originator可以访问和修改它的状态,外部对象不能访问和修改它。...Caretaker(管理者):负责保存和恢复Originator的状态。它保存了Originator的历史状态列表,并提供了一个接口来保存和恢复这些状态。...originator = new Originator(); Caretaker caretaker = new Caretaker(); originator.State = "State 1";...originator.State = "State 2"; caretaker.SaveState(originator.SaveState()); originator.State = "State...当需要恢复之前的状态时,Caretaker通过调用RestoreState方法来获取Memento对象,并将其传递给Originator的RestoreState方法,从而将Originator恢复到之前的状态
: 对象(需要保存状态的对象) Memento : 备忘录对象,负责保存好记录,即Originator内部状态 Caretaker: 守护者对象,负责保存多个备忘录对象,使用集合管理,提高效率...originator = new Originator(); Caretaker caretaker = new Caretaker(); originator.setState...originator.setState(" 状态#2 攻击力 80 "); caretaker.add(originator.saveStateMemento());...originator.setState(" 状态#3 攻击力 50 "); caretaker.add(originator.saveStateMemento());...System.out.println("当前的状态是 =" + originator.getState()); //希望得到状态 1, 将 originator 恢复到状态1
这样以后就可将该对象恢复到原先保存的状态. class Originator { private string state; public string State {...set { memento = value; } } } public static void Main(string[] args) { Originator...originator = new Originator(); originator.State = "On"; originator.Show(); Caretaker caretaker...= new Caretaker(); caretaker.Memento = originator.CreateMemento(); originator.State = "Off"...; originator.Show(); originator.SetMemento(caretaker.Memento); originator.Show(); }
to momento..."); return new Originator.Momento(this....> savedStates = new List(); var originator = new Originator(); originator.SetState...("State1"); originator.SetState("State2"); savedStates.Add(originator.SaveToMomento()...); originator.SetState("State3"); savedStates.Add(originator.SaveToMomento());...originator.SetState("State4"); originator.RestoreFromMomento(savedStates[0]); Console.ReadKey
流程 流程的背景:模拟游戏内的存档,然后在需要的时候回退 2.1 Originator public class Originator { // 发起者内部状态(可有多个属性,这里为了简洁只写一个...originator = new Originator(); CareTaker careTaker = new CareTaker(); // 角色刚进新手村,等级为...1 originator.setState("1"); careTaker.add("2021-10-1", originator.createMemento());...", originator.createMemento()); // 游戏通关了,等级为 99 originator.setState("99");...(originator.getState()); // 回档1,回到新手村,10 originator.setMemento(careTaker.get("2021-10
Memento(备忘录):存储Originator的内部状态。它应保护内容,不被任何其他代码修改。 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"); Console.WriteLine...("Current State: " + originator.GetState()); originator.GetStateFromMemento(careTaker.Get(0)); Console.WriteLine
Originator类的具体代码如下: public class Originator { private String state; public String getState()...在实际操作中,可以将Memento和Originator类定义在同一个包中来实现封装;也可以将Memento类作为Originator的内部类。...= new Originator(); Caretaker caretaker = new Caretaker(); //在originator和caretaker中保存...memento对象 originator.setState("1"); System.out.println("当前的状态是:" + originator.getState...()); caretaker.setMemento(originator.createMemento()); originator.setState("2");
示例代码 public class Originator { private String state; // 需要保存的属性 public String getState() { return...originator = new Originator(); originator.setState("On"); originator.show(); Caretaker caretaker...= new Caretaker(); caretaker.setMemento(originator.createMemento()); originator.setState("Off");...originator.show(); originator.setMemento(caretaker.getMemento()); originator.show(); } //输出 State...对象由需要保存状态的Originator创建,交给Caretaker保存。Originator恢复的时候也从Caretaker获取Memeto进行数据恢复。
通用代码实现 class Originator { private String state = ""; public String getState() { return state;...originator = new Originator(); originator.setState("状态1"); System.out.println("初始状态:"+originator.getState...()); Caretaker caretaker = new Caretaker(); caretaker.setMemento(originator.createMemento()); originator.setState...("状态2"); System.out.println("改变后状态:"+originator.getState()); originator.restoreMemento(caretaker.getMemento...()); System.out.println("恢复后状态:"+originator.getState()); } } 代码演示了一个单状态单备份的样例,逻辑很easy:Originator
备忘录模式包含三个角色: Originator(发起人):负责创建一个备忘录Memento,用以记录当前时刻它的内部状态,并可以使用备忘录恢复内部状态。...Originator可根据需要决定Memento存储Originator的那些内部状态 Memento(备忘录):负责存储Originator对象的内部状态,并可防止Originator以外的其他对象访问备忘录...初始类 type Originator struct { state string } //NewOriginator 实例化初始类 func NewOriginator(st string...) *Originator { return &Originator{ state: st, } } //SetState 初始化类设置状态 func (o *Originator...{ return o.state } //SaveStateToMemento 将初始类状态保存到备忘录类 func (o *Originator) SaveStateToMemento()
备忘录角色Memento 负责记录Originator的部分或者全部状态,也就是拥有Originator的部分或者全部属性 备忘录角色的设计必然要参考Originator 备忘录角色应该仅仅允许Originator...originator = new Originator(); originator.setState(2); //快照 Memento memento = originator.createMemento...originator; CareTaker(Originator originator) { this.originator = originator; }...(); originator.recovery(originator.recovery(); } Originator与Memento合并 备忘录模式的根本在于状态的保存,模式的结构是一种通用的解决方案...Memento对象是对于Originator内部部分或者全部状态的一个封装 如果只是保存对象的状态,也可以借助于原型模式进行替代 也就是说使用另外一个新的Originator对象保存当前Originator
; public class Application { public static void main(String[] args) { Originator originator...{贤者的庇护}时★★★"); originator.setState("alive"); System.out.println(" →玩家状态...:" + originator.getState()); caretaker.saveMemento(originator.createMemento());...("death"); System.out.println(" →玩家状态:" + originator.getState()); originator.restoreMemento...()); } } 原发者(Originator) Originator,java package angle_mementoPattern; import angle_mementoPattern.Memento
备忘录模式所涉及的角色有三个:备忘录(Memento)角色、发起人(Originator)角色、负责人(Caretaker)角色。...备忘录角色 备忘录角色又如下责任: (1)将发起人(Originator)对象的内战状态存储起来。...备忘录可以根据发起人对象的判断来决定存储多少发起人(Originator)对象的内部状态。 (2)备忘录可以保护其内容不被发起人(Originator)对象之外的任何对象所读取。 ...将Memento设成Originator类的内部类,从而将Memento对象封装在Originator里面;在外部提供一个标识接口 MementoIF给Caretaker以及其他对象。...备忘录角色有如下责任: (1)将发起人(Originator)对象的内部状态存储起来。 (2)备忘录可以保护其内容不被发起人(Originator)对象之外的任何对象所读取。
originator = new Originator(); Caretaker caretaker = new Caretaker(); // 发起人设置初始状态...originator.setState("State 1"); System.out.println("当前状态: " + originator.getState());...originator.setState("State 2"); System.out.println("当前状态: " + originator.getState())...在示例代码中,我们创建了一个 Originator 对象,并设置了初始状态为 State 1。 然后,我们创建了一个备忘录并保存了 Originator 的状态。...接下来,我们修改了 Originator 的状态为 State 2。 最后,我们使用 Caretaker 从备忘录中恢复了 Originator 的状态,并打印出恢复后的状态。
如果希望保存多个originator对象的不同时间的状态,也可以,只需要要 HashMap 接下来我们就通过游戏存档的代码案例来演示说明一下: Originator(这就是一个原始对象...originator = new Originator(); Caretaker caretaker = new Caretaker(); originator.setState(" 状态...#1 攻击力 100 "); //保存了当前的状态 caretaker.add(originator.saveStateMemento()); originator.setState...(" 状态#2 攻击力 80 "); caretaker.add(originator.saveStateMemento()); originator.setState(" 状态#3...+ originator.getState()); //希望得到状态 1, 将 originator 恢复到状态1 originator.getStateFromMemento(caretaker.get
领取专属 10元无门槛券
手把手带您无忧上云