备忘录模式c++
来源:互联网 发布:淘宝开黑车 编辑:程序博客网 时间:2024/06/03 09:37
#include <iostream>#include <string>#include <deque>using namespace std;//备忘录类(保存着事务的状态,对外不可见)class MememTo{public: MememTo(string name, int age) :m_name(name), m_age(age){} void setName(string name) { m_name = name; } string getName() { return m_name; } void setAge(int age) { m_age = age; } int getAge() { return m_age; }private: string m_name; int m_age;};//需要备份的类class Person{public: Person(string name, int age) :m_name(name), m_age(age){} void print() { cout << m_name << " " << m_age << endl; } void setName(string name) { m_name = name; } string getName() { return m_name; } void setAge(int age) { m_age = age; } int getAge() { return m_age; } MememTo* createMememTo() { return new MememTo(m_name, m_age); } void getMememTo(MememTo* m) { if (m != nullptr) { m_name = m->getName(); m_age = m->getAge(); delete m;//释放内存 } }private: string m_name; int m_age;};//一个容器存储着备忘录类的指针class Caretaker{public: Caretaker() { m_deque.clear(); } ~Caretaker() { for (deque<MememTo*>::iterator it = m_deque.begin(); it != m_deque.end(); ++it) { delete (*it);//释放内存 } m_deque.clear(); } void setMememTo(MememTo* m) { if (m_deque.size() != 10)//假设只能存储10个先前的状态 { m_deque.push_back(m); } else { delete m_deque[0]; m_deque.pop_front();//弹出 m_deque.push_back(m); } } MememTo* getMememTo() { if (!m_deque.empty()) { MememTo* temp = *(m_deque.rbegin()); m_deque.pop_back(); return temp; } else { return nullptr; } }private: deque<MememTo*> m_deque;};int main(){ Person* pPerson = nullptr; Caretaker* pC = nullptr; pPerson = new Person("zhang", 33); pPerson->print();//zhang pC = new Caretaker; pC->setMememTo(pPerson->createMememTo()); pPerson->setName("lixi"); pPerson->setAge(32); pPerson->print();//lixi pC->setMememTo(pPerson->createMememTo()); pPerson->getMememTo(pC->getMememTo()); pPerson->print();//lixi pPerson->getMememTo(pC->getMememTo()); pPerson->print();//zhang //已经没有状态了,所以是最原先的状态,也就是上一次的状态 pPerson->getMememTo(pC->getMememTo()); pPerson->print();//zhang delete pC; delete pPerson; return 0;}
阅读全文
0 0
- 【C++】Chapter14:备忘录模式
- Objective C--备忘录模式
- Objective C 备忘录模式
- C语言设计模式:备忘录
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- yii2简单使用mongodb(创建索引,简单查询,聚合查询)
- opencv使用入门——配置
- 使用Mysql前的基本操作
- -bash: nginx: command not found 解决方案
- 排序
- 备忘录模式c++
- Leetcode#:557. Reverse Words in a String III
- Linux面试要点
- 超详细讲解Sqoop2应用与实践
- Android开发之手势之一个切换图片的demo
- 嵌入式学习笔记(第三天)
- bzoj 5220. 【GDOI2018模拟7.10】C 动态规划
- Vim使用
- 树分治-点分治