91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

備忘錄模式和策略模式

發布時間:2020-07-16 23:02:15 來源:網絡 閱讀:436 作者:匯天下豪杰 欄目:編程語言

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)、運行結果

備忘錄模式和策略模式




向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

类乌齐县| 清流县| 运城市| 阿拉善盟| 清水河县| 晋中市| 房山区| 金秀| 察哈| 永安市| 静海县| 锦屏县| 奉新县| 高雄县| 海阳市| 兰州市| 西林县| 静海县| 凤台县| 波密县| 靖远县| 泰州市| 潜江市| 鹤庆县| 政和县| 万宁市| 汶川县| 温宿县| 比如县| 九龙县| 界首市| 定州市| 开江县| 崇义县| 曲阳县| 崇州市| 淅川县| 乌鲁木齐县| 顺义区| 常德市| 屏东县|