备忘录模式和策略模式

1、备忘录模式

成都创新互联公司专注于企业营销型网站、网站重做改版、桑日网站定制设计、自适应品牌网站建设、H5响应式网站商城网站开发、集团公司官网建设、成都外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为桑日等各大城市提供网站开发制作服务。

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

2、具体实现

(1)、代码实现

#include
#include
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 = 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<<"---------------------------"<createMem();
    p->setAge(42);
    p->printT();

    cout<<"还原旧的状态"<setMem(m);
    p->printT();

    delete p;
    */

    Manager *m1;      
    Person *p = new Person("张三",32);
    p->printT();
    //创建Person对象的一个状态
    cout<<"---------------------------"<createMem());
    p->setAge(42);
    p->printT();

    cout<<"还原旧的状态"<setMem(m1->getMem());
    p->printT();

    delete p;

    return 0;
}

  (2)、结果如下

备忘录模式和策略模式

3、策略模式

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


4、具体实现

  (1)、代码如下

#include
using namespace std;

//策略模式:准备一组算法,并将每一个算法封装起来,使得它们可以互换;
 
class Strategy{
    public:
        virtual void crypt() = 0;
    private:
};

class AES : public Strategy{
    public:
        virtual void crypt(){
            cout<<"AES加密算法"<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)、运行结果

备忘录模式和策略模式


本文标题:备忘录模式和策略模式
转载来源:http://abwzjs.com/article/joesie.html