/**
* 备忘录模式:也就是拥有反悔功能的模式:成员有3个
* 发起者Originator:一切围绕它转,它拥有自己的状态,可以给状态记录备份和恢复状态
* 备忘录Memento:记录发起者的状态,当发起者要恢复状态时,就调用它,前提是要先备份才能恢复
* 备忘录管理者Caretaker:备忘录创建后,总要有个地方存吧,不然将来要恢复状态时,找不到对应的备份了
*
*
*/
//发起者
public class Originator {
private String status;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public Memento createMemento(){
return new Memento(status);
}
public void restoreMemento(Memento memento){
this.status=memento.getStatu();
}
}
//备忘录
public class Memento{
private String statu;
public String getStatu() {
return statu;
}
public Memento(String statu) {
this.statu = statu;
}
public void setStatu(String statu) {
this.statu = statu;
}
}
//管理者,存储备忘录
public class Caretaker {
private Memento memento;
public Memento getMemento() {
return memento;
}
public void setMemento(Memento memento) {
this.memento = memento;
}
}
public class Test {
public static void main(String[] args) {
Originator originator = new Originator();
originator.setStatus("init");//初始状态
System.out.println("初始状态:"+originator.getStatus());
Caretaker caretaker = new Caretaker();//管理者
Memento memento = originator.createMemento();
caretaker.setMemento(memento);//备份
originator.setStatus("final");
System.out.println("最终状态"+originator.getStatus());
//恢复状态
originator.restoreMemento(caretaker.getMemento());
System.out.println("恢复后的状态:"+originator.getStatus());
}
}
/**
* 备忘录模式引用场景:手机删除了通讯录,然后通过云端备份还原,手机就是发起者(Originator),它拥有创建备份和恢复备份功能
* 小米云就是备忘录(Memento),备忘录有多个联系人,此外还有一个管理者,管理备忘录(Caretaker)
*
*
*/
//手机(Originator)
public class RemiPhone {
private List<LinkMan> list;
public List<LinkMan> getList() {
return list;
}
public void setList(List<LinkMan> list) {
this.list = list;
}
//创建联系人备份
public XiaoMiClound creatCloud(){
return new XiaoMiClound(list);
}
//恢复联系人
public void restoreLinkMan(XiaoMiClound clound){
this.list=clound.getList();
}
//清空联系人
public void clearAll(){
list=new ArrayList<>();
}
}
//小米云备份,备忘录角色(Memento)
public class XiaoMiClound {
private List<LinkMan> list;
public XiaoMiClound(List<LinkMan> list) {
this.list = list;
}
public List<LinkMan> getList() {
return list;
}
public void setList(List<LinkMan> list) {
this.list = list;
}
}
//备忘录管理者
public class LinkManCaretaker {
private XiaoMiClound xiaoMiClound;
public XiaoMiClound getXiaoMiClound() {
return xiaoMiClound;
}
public void setXiaoMiClound(XiaoMiClound xiaoMiClound) {
this.xiaoMiClound = xiaoMiClound;
}
}
//联系人
public class LinkMan {
private String name;
private String phone;
public LinkMan(String name, String phone) {
this.name = name;
this.phone = phone;
}
public LinkMan() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Override
public String toString() {
return "LinkMan{" +
"name='" + name + '\'' +
", phone='" + phone + '\'' +
'}';
}
}
public class Demo {
public static void main(String[] args) {
//创建联系人
List<LinkMan> list=new ArrayList<>();
list.add(new LinkMan("yangxiaohui","215555555"));
list.add(new LinkMan("xiaoMing","322222"));
list.add(new LinkMan("xiaohua","422256666"));
list.add(new LinkMan("xiaohong","689999999"));
//创建红米手机
RemiPhone remiPhone = new RemiPhone();
//存储联系人
remiPhone.setList(list);
XiaoMiClound xiaoMiClound = remiPhone.creatCloud();//创建云备份
LinkManCaretaker linkManCaretaker = new LinkManCaretaker();
linkManCaretaker.setXiaoMiClound(xiaoMiClound);//存储云备份
//刷机,删除了联系人
remiPhone.clearAll();
System.out.println("还有"+remiPhone.getList().size()+"个联系人");//0
//模拟云端恢复联系人
remiPhone.restoreLinkMan(linkManCaretaker.getXiaoMiClound());
System.out.println("还有"+remiPhone.getList().size()+"个联系人");//4
}
}