备忘录模式和策略模式
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)、运行结果
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。