设计模式 - 备忘录模式(Memento)
2017-04-04 15:04
429 查看
Memento模式在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
类图:
案例: 购物的时候你可以临时改变送货地址和联系电话,通过Memento模式恢复到原始的送货地址和联系电话。
测试代码
类图:
案例: 购物的时候你可以临时改变送货地址和联系电话,通过Memento模式恢复到原始的送货地址和联系电话。
public class Buyer { private String name; private String phoneNum; private String address; public Buyer(String name, String phoneNum, String address) { this.name = name; this.phoneNum = phoneNum; this.address = address; } public String getName() { return name; } public String getPhoneNum() { return phoneNum; } public void setPhoneNum(String phoneNum) { this.phoneNum = phoneNum; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public Memento createMemento() { return new Memento(this.phoneNum, this.address); } public void setMemento(Memento memento) { this.phoneNum = memento.getPhoneNum(); this.address = memento.getAddress(); } }
public class Memento { private String phoneNum; private String address; public Memento(String phoneNum, String address) { this.phoneNum = phoneNum; this.address = address; } public String getPhoneNum() { return phoneNum; } public void setPhoneNum(String phoneNum) { this.phoneNum = phoneNum; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }
测试代码
import org.junit.Test; import static org.junit.Assert.*; public class MementoTest { @Test public void testMemento(){ Buyer buyer = new Buyer("Tom", "0755-12345678", "Shenzhen"); assertEquals("the original phone number is 0755-12345678", "0755-12345678", buyer.getPhoneNum()); assertEquals("the original address is Shenzhen", "Shenzhen", buyer.getAddress()); Memento memento = buyer.createMemento(); buyer.setPhoneNum("021-88888888"); buyer.setAddress("ShangHai"); assertEquals("the phone number is changed to 021-88888888", "021-88888888", buyer.getPhoneNum()); assertEquals("the original address is changed to ShangHai", "ShangHai", buyer.getAddress()); buyer.setMemento(memento); assertEquals("the phone number is restored to 0755-12345678", "0755-12345678", buyer.getPhoneNum()); assertEquals("the original address is restored to Shenzhen", "Shenzhen", buyer.getAddress()); } }
相关文章推荐
- [设计模式](十二):备忘录模式(Memento)|状态模式(State) - (两种类状态行为模式)
- java 设计模式 行为模式 -Memento(备忘录模式)
- 设计模式-行为型- 备忘录模式(Memento)
- 设计模式-备忘录模式(Memento)的详解
- Java设计模式之备忘录模式(Memento模式)介绍
- java设计模式(十八)——备忘录模式(Memento)
- 设计模式20:Memento 备忘录模式(行为型模式)
- 23设计模式之备忘录模式(Memento)
- Java设计模式——备忘录模式(Memento)
- 设计模式(十八)----- 备忘录模式(Memento)----(JAVA版)
- 设计模式之备忘录模式(Memento)
- 设计模式(4)-行为型-备忘录模式(Memento)
- Java设计模式之--备忘录模式(Memento)
- Java开发中的23种设计模式之十九:备忘录模式(Memento)
- 设计模式——备忘录模式(Memento)
- 设计模式(15)-备忘录模式(Memento)
- 【设计模式 - 18】之备忘录模式(Memento)
- 设计模式--备忘录模式(Memento)
- java设计模式19——备忘录模式(Memento)
- JAVA设计模式(20):行为型-备忘录模式(Memento)