/**
* 备忘录模式
* 关键:
* “白箱”:(备忘录是单独一个类)
* 发起人Originator类:定义角色状态等多个属性,并定义方法创建备忘录对象,和还原备忘录所记载的状态
* 备忘录Memento类:记录Originator类中定义的属性
* 负责人Caretaker类:负责保存备忘录对象和还原备忘录对象
* “黑箱”:(定义一个备忘录标识接口,备忘录类是发起人Orginator的一个内部类)
* 发起人Originator类:定义角色状态等多个属性,并定义方法创建备忘录对象并返回备忘录标识接口,和还原备忘录所记载的状态
* 备忘录MementoF接口:标识作用
* 备忘录Memento类(Originator中的内部类):记录Originator类中定义的属性
* 负责人Caretaker类:负责保存备忘录对象和还原备忘录对象
* (“黑箱操作”:返回备忘录的是一个标识接口,没有任何实质的内容,对发起人提供宽接口(转成内部类即可操作),对其他对象提供一个窄接口(接口中没有任何方法))
* @author zbl
*
*/
public class MementoCustomer {
public static void main(String[] args) {
//白箱
Originator originator = new Originator();//发起人
originator.setState("first");//到达状态一
Caretaker caretaker = new Caretaker();//负责人
caretaker.saveMemento(originator.createMemonto());//负责人保存备忘录状态一
originator.setState("second");//到达状态二
originator.restoreMemento(caretaker.retrieveMemonto());//恢复到状态一
System.out.println(originator.getState());
//黑箱
Originator2 originator2 = new Originator2();//发起人
originator2.setState("first");//达到状态一
Caretaker2 caretaker2 = new Caretaker2();//负责人
caretaker2.saveMemento(originator2.createMemonto());//负责人保存备忘录状态一
originator2.setState("second");//达到状态二
originator2.restoreMemento(caretaker2.retrieveMemonto());//恢复到状态二
System.out.println(originator2.getState());
}
}
//白箱
//发起人
class Originator{
private String state;
public Memento createMemonto(){
return new Memento(state);
}
public void restoreMemento(Memento memento){
this.state = memento.getState();
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
}
//备忘录
class Memento{
private String state;
public Memento(String state){
this.state = state;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
}
//负责人
class Caretaker{
private Memento memento;
public void saveMemento(Memento memento){
this.memento = memento;
}
public Memento retrieveMemonto(){
return this.memento;
}
}
//黑箱
//发起人
class Originator2{
private String state;
public MementoF createMemonto(){
return new Memento2(state);
}
public void restoreMemento(MementoF memento){
this.state = ((Memento2)memento).getState();
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
//备忘录(内部类)
private class Memento2 implements MementoF{
private String state;
public Memento2(String state){
this.state = state;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
}
}
interface MementoF{}//备忘录接口
//负责人
class Caretaker2{
private MementoF memento;
public void saveMemento(MementoF memento){
this.memento = memento;
}
public MementoF retrieveMemonto(){
return this.memento;
}
}