行为型模式之备忘录模式实现
来源:互联网 发布:淘宝网营销分析ppt 编辑:程序博客网 时间:2024/06/05 18:04
概念
备忘录模式是行为模式之一,它的作用是保存对象的内部状态,并在需要的时候(undo/rollback)恢复对象以前的状态。
应用场景
如果一个对象需要保存状态并可通过undo或rollback等操作恢复到以前的状态时,可以使用Memento模式。
1)一个类需要保存它的对象的状态(相当于Originator角色);
2)设计一个类,该类只是用来保存上述对象的状态(相当于Memento角色);
3)需要的时候,Caretaker角色要求Originator返回一个Memento并加以保存;
4)undo或rollback操作时,通过Caretacker保存的Memento恢复Originator对象的状态。
角色和职责
Originator(原生者):需要被保存状态以便恢复的那个对象。
Memento(备忘录):该对象由Originator创建,主要用来保存Originator的内部状态。
Caretcker(管理者)负责在适当的时间保存/恢复Originator对象的状态。
适用于:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样就可以将以后的对象状态恢复到先前保存的状态。
适用于功能比较复杂的,但需要记录或维护属性历史的类;或者是需要保存的属性只是众多属性中的一小部分时Originator可以根据保存的Memo还原到前一状态。
案例
#include <iostream>using namespace std;#include "string"//负责存储Person对象的内部状态class MememTo{public: MememTo(string name, int age) { this->m_name = name; this->m_age = age; } void setName(string name) { this->m_name = name; } string getName() { return m_name; } void setAge(int age) { this->m_age = age; } int getAge() { return m_age; }private: string m_name; int m_age;};class Person{public: Person(string name, int age) { this->m_name = name; this->m_age = age; } void setName(string name) { this->m_name = name; } string getName() { return m_name; } void setAge(int age) { this->m_age = age; } int getAge() { return m_age; } void printT() { cout << "name: " << m_name << "age: " << m_age << endl; }public: //Person对象之外创建备份 MememTo *createMememTo() { return new MememTo(m_name, m_age); } //Person对象之外恢复备份 void SetMememTo(MememTo *memto) { m_name = memto->getName(); m_age = memto->getAge(); }protected:private: string m_name; int m_age;};class Caretaker{public: Caretaker(MememTo *mem) { this->m_memto = mem; } MememTo *getMememTo() { return m_mento; } void setMememTo(Mememto *mem) { this->m_memto = mem; }private: MememTo *m_memto;};void main01(){ Person *p = new Person("张三",18); p->prinT(); //创建备份 //Caretaker *ct = new Caretaker(p->createMememTo()); MememTo *membak = p->createMememTo(); //改为由MememTo负责保存 p->setAge(28); p->printT(); //恢复信息 p->SetMememTo(membak); p->printT(); delete p; delete ct->getMememTo(); return ;}void main02(){ Person *p = new Person("张三",18); p->prinT(); //创建备份 Caretaker *ct = new Caretaker(p->createMememTo()); p->setAge(28); p->printT(); //恢复信息 p->SetMememTo(ct->getMememTo()); p->printT(); delete p; delete ct->getMememTo(); return ;}int main(void){ //main01(); main02(); system("pause"); return 0;}
阅读全文
0 0
- 行为型模式之备忘录模式实现
- 行为型之备忘录模式
- 设计模式-行为型之备忘录模式
- 行为模式之备忘录模式
- 备忘录模式(行为型)
- 行为型模式之备忘录MEMENTO
- 行为型模式--备忘录模式
- 行为型模式-备忘录模式
- Java设计模式之行为型模式(备忘录模式)
- 设计模式 - 行为型模式 - 备忘录模式
- 设计模式->行为型模式->备忘录模式
- 设计模式笔记--行为型模式之六--Memento 备忘录
- 行为型模式之备忘录模式(Memento)
- java设计模式(行为型)之备忘录模式
- 设计模式(行为型)之备忘录模式(Memento Pattern)
- 行为型模式之五——备忘录模式
- 行为型:设计模式之备忘录模式(二十)
- 行为型模式之备忘录模式(Memento)
- 接口调试工具、接口测试工具、http接口调试工具、https接口调试工具
- 用Fiddler对Android应用进行抓包详解
- 无头单链表的非尾节点删除
- Intent的学习小记
- Lombok使用无效,个人情况解决方案
- 行为型模式之备忘录模式实现
- SimpleAdapter的使用介绍
- 单层石墨烯工业化量产科研成果及工业化量产基地落地
- C++11中<chrono>的使用
- dubbo的均衡策略
- java总结
- genymotion模拟器运行arm架构的应用出现java.lang.UnsatisfiedLinkError
- less简单的入门知识总结
- Java异常处理