记忆模式与状态有关。 要将对象还原到其先前状态时,可以使用它。 您有一个对象,您可以应用一些操作,并且能够还原这些操作并使该对象处于以前的各种状态。
我们大多数人实现各种算法,有时我们确实需要评估em。 想象一下,有一个评估交易决策的程序,您想转到以前的状态,并检查如果更改公式后帐户余额会发生什么,然后评估每个步骤的帐户余额。
该算法的步骤以及您应更改的内容肯定会有所不同。 记忆模式将帮助我们完成任务,并帮助我们快速进行内存评估。
我们将有一个包含帐户余额的Memento对象。 备忘录将代表不同阶段的平衡。
package com.gkatzioura.design.behavioural.memento;
public class Memento {
private Double balance;
public Memento(Double balance) {
this.balance = balance;
}
public Double getBalance() {
return balance;
}
}
然后,我们将创建原始对象。 发起者将包含当前状态。 当我们需要存储它时,它可以将其作为纪念品返回。 同样,我们可以使用memento对象来恢复特定状态。
package com.gkatzioura.design.behavioural.memento;
public class Originator {
private Double balance;
public void setBalance(Double balance) {
this.balance = balance;
}
public Double getBalance() {
return balance;
}
public Memento saveToMemento() {
return new Memento(balance);
}
public void restoreToState(Memento memento) {
balance = memento.getBalance();
}
}
最后一步是CareTaker对象,它将包含我们余额的历史记录。 管理员将在各个阶段获取对象状态。
package com.gkatzioura.design.behavioural.memento;
import java.util.ArrayList;
import java.util.List;
public class CareTaker {
private List mementoList = new ArrayList();
public void add(Memento state){
mementoList.add(state);
}
public Memento get(int index){
return mementoList.get(index);
}
}
因此,让我们将它们放在一起。
package com.gkatzioura.design.behavioural.memento;
public class MementoMain {
public static void main(String[] args) {
Double balance = 20.1d;
Originator originator = new Originator();
originator.setBalance(balance);
CareTaker careTaker = new CareTaker();
careTaker.add(originator.saveToMemento());
/**
* Do a transaction
*/
originator.setBalance(balance-2);
careTaker.add(originator.saveToMemento());
/**
* Do a transaction
*/
originator.setBalance(balance+4);
careTaker.add(originator.saveToMemento());
System.out.println(careTaker.get(0).getBalance());
System.out.println(careTaker.get(1).getBalance());
System.out.println(careTaker.get(2).getBalance());
}
}
您可以在github上找到源代码。
翻译自: https://www.javacodegeeks.com/2018/11/behavioural-design-patterns-memento.html