1、备忘录模式

保存对象的状态,在需要的时候在恢复出来即可!!!


2、具体实现

  (1)、代码实现

#include<iostream>#include<string>usingnamespacestd;classMem{//备忘录类public:Mem(stringname,intage){m_name=name;m_age=age;}stringgetName(){returnm_name;}intgetAge(){returnm_age;}voidsetName(stringname){m_name=name;}voidsetAge(intage){m_age=age;}private:stringm_name;intm_age;};classPerson{public:Person(stringname,intage){m_name=name;m_age=age;}stringgetName(){returnm_name;}intgetAge(){returnm_age;}voidsetName(stringname){m_name=name;}voidsetAge(intage){m_age=age;}//保存Mem*createMem(){returnnewMem(m_name,m_age);}//还原voidsetMem(Mem*mem){this->m_age=mem->getAge();this->m_name=mem->getName();}voidprintT(){cout<<"m_name:"<<m_name<<"m_age:"<<m_age<<endl;}private:stringm_name;intm_age;};//增加一个备忘录的管理者!!!classManager{public:Manager(Mem*m){this->m=m;}Mem*getMem(){returnm;}voidsetMem(Mem*m){this->m=m;}private:Mem*m;//持有一个备忘录的引用!!!};intmain(void){/*Mem*m=NULL;Person*p=newPerson("张三",32);p->printT();//创建Person对象的一个状态cout<<"---------------------------"<<endl;m=p->createMem();p->setAge(42);p->printT();cout<<"还原旧的状态"<<endl;p->setMem(m);p->printT();deletep;*/Manager*m1;Person*p=newPerson("张三",32);p->printT();//创建Person对象的一个状态cout<<"---------------------------"<<endl;m1=newManager(p->createMem());p->setAge(42);p->printT();cout<<"还原旧的状态"<<endl;p->setMem(m1->getMem());p->printT();deletep;return0;}

(2)、结果如下


3、策略模式

准备一组算法,并将每一个算法封装起来,使得它们可以互换;


4、具体实现

(1)、代码如下

#include<iostream>usingnamespacestd;//策略模式:准备一组算法,并将每一个算法封装起来,使得它们可以互换;classStrategy{public:virtualvoidcrypt()=0;private:};classAES:publicStrategy{public:virtualvoidcrypt(){cout<<"AES加密算法"<<endl;}private:};classDES:publicStrategy{public:virtualvoidcrypt(){cout<<"DES加密算法"<<endl;}private:};classContext{//组合算法的抽象类public:voidsetStrategy(Strategy*strategy){this->strategy=strategy;}voidmyoperator(){strategy->crypt();}private:Strategy*strategy;};intmain(void){//1、直接调用的方法;/*DES*des=newDES;des->crypt();deletedes;*///2、客户端可以自由的进行策略的更换;//Strategy*des=newDES;Strategy*des=newAES;Context*context=newContext;context->setStrategy(des);context->myoperator();deletedes;deletecontext;return0;}

(2)、运行结果