备忘录模式和策略模式
2016-12-25 10:41
190 查看
1、备忘录模式
保存对象的状态,在需要的时候在恢复出来即可!!!
2、具体实现
(1)、代码实现
3、策略模式
准备一组算法,并将每一个算法封装起来,使得它们可以互换;
4、具体实现
(1)、代码如下
保存对象的状态,在需要的时候在恢复出来即可!!!
2、具体实现
(1)、代码实现
#include<iostream> #include<string> using namespace std; class Mem{ //备忘录类 public: Mem(string name, int age){ m_name = name; m_age = age; } string getName(){ return m_name; } int getAge(){ return m_age; } void setName(string name){ m_name = name; } void setAge(int age){ m_age = age; } private: string m_name; int m_age; }; class Person{ public: Person(string name, int age){ m_name = name; m_age = age; } string getName(){ return m_name; } int getAge(){ return m_age; } void setName(string name){ m_name = name; } void setAge(int age){ m_age = age; } //保存 Mem *createMem(){ return new Mem(m_name, m_age); } //还原 void setMem(Mem *mem){ this->m_age = mem->getAge(); this->m_name = mem->getName(); } void printT(){ cout<<"m_name: "<<m_name<<"m_age: "<<m_age<<endl; } private: string m_name; int m_age; }; //增加一个备忘录的管理者!!! class Manager{ public: Manager(Mem *m){ this->m = m; } Mem *getMem(){ return m; } void setMem(Mem *m){ this->m = m; } private: Mem *m; //持有一个备忘录的引用!!! }; int main(void){ /* Mem *m = NULL; Person *p = new Person("张三",32); p->printT(); //创建Person对象的一个状态 cout<<"---------------------------"<<endl; m = p->createMem(); p->setAge(42); p->printT(); cout<<"还原旧的状态"<<endl; p->setMem(m); p->printT(); delete p; */ Manager *m1; Person *p = new Person("张三",32); p->printT(); //创建Person对象的一个状态 cout<<"---------------------------"<<endl; m1 = new Manager(p->createMem()); p->setAge(42); p->printT(); cout<<"还原旧的状态"<<endl; p->setMem(m1->getMem()); p->printT(); delete p; return 0; }(2)、结果如下
3、策略模式
准备一组算法,并将每一个算法封装起来,使得它们可以互换;
4、具体实现
(1)、代码如下
#include<iostream> using namespace std; //策略模式:准备一组算法,并将每一个算法封装起来,使得它们可以互换; class Strategy{ public: virtual void crypt() = 0; private: }; class AES : public Strategy{ public: virtual void crypt(){ cout<<"AES加密算法"<<endl; } private: }; class DES : public Strategy{ public: virtual void crypt(){ cout<<"DES加密算法"<<endl; } private: }; class Context{ //组合算法的抽象类 public: void setStrategy(Strategy *strategy){ this->strategy = strategy; } void myoperator(){ strategy->crypt(); } private: Strategy *strategy; }; int main(void){ //1、直接调用的方法; /* DES *des = new DES; des->crypt(); delete des; */ //2、客户端可以自由的进行策略的更换; //Strategy *des = new DES; Strategy *des = new AES; Context *context = new Context; context->setStrategy(des); context->myoperator(); delete des; delete context; return 0; }(2)、运行结果
相关文章推荐
- "围观"设计模式(31)--行为型设计模式总结(模板、观察者、策略、状态、责任链、命令、访问者、中介者、备忘录、解释器)
- 23种设计模式4--行为型模式(策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式)
- 设计模式——策略模式的实现[备忘录]
- 《大话设计模式》——学习笔记之"行为型模式"(观察者&模板方法&命令&状态&职责链&解释器&中介者&访问者&策略&备忘录&迭代器)
- JAVA备忘录之设计模式(01):策略模式
- 23种设计模式4--行为型模式(策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式)
- 设计模式之行为型模式(责任链、命令、解释器、迭代式、仲裁者、备忘录、观察者、状态、策略、模板方法、访问者)
- 策略模式之C#版本(原创翻译版本)
- 设计模式——策略模式
- 策略模式之C++版本
- 关于策略模式
- Head first design patterns 读书笔记 – Strategy(策略模式)
- MIS开发中C/S模式与B/S模式的结合策略
- 《Java与模式》学习笔记之九-----策略模式(Strategy Pattern)
- (22)策略模式-Strategy Pattern-康熙收复台湾-明珠和索额图的不同策略
- 设计模式之Strategy(策略)
- 从诸葛亮的三个锦囊妙计谈策略模式
- 策略模式以及策略模式与模板方法的结合
- 设计模式之Strategy(策略)
- 设计模式之Strategy(策略)