14.备忘录模式

 

/**

* 备忘录模式

* 关键:

* “白箱”:(备忘录是单独一个类)

* 发起人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;

}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值