设计模式-备忘录模式

适用情境:在一个对象外部记录其状态,在对象状态改变后提供恢复以前状态的功能.

这里写图片描述

// device.h
#ifndef DEVICE_H
#define DEVICE_H

#include "memo.h"

class Device
{
public:
    Device();
    Memo* CreateMemo();
    void Recover(Memo* memo);
    void Show();
public:
    int m_state_code;
};

#endif // DEVICE_H
//device.cpp
#include "device.h"
#include <iostream>

Device::Device(){}

Memo* Device::CreateMemo()
{
    return new Memo(m_state_code);
}

void Device::Recover(Memo *memo)
{
    m_state_code = memo->m_state_code_bak;
}

void Device::Show()
{
    std::cout << m_state_code << std::endl;
}
// memo.h
#ifndef MEMO_H
#define MEMO_H

class Memo
{
public:
    Memo(int state_code);

    int m_state_code_bak;
};

#endif // MEMO_H
// memo.cpp
#include "memo.h"

Memo::Memo(int state_code)
{
    m_state_code_bak = state_code;
}
// caretaker.h
#ifndef CARETAKER_H
#define CARETAKER_H

#include "memo.h"

class Caretaker
{
public:
    Caretaker();
    Memo* m_memo;
};

#endif // CARETAKER_H
// caretaker.cpp
#include "caretaker.h"

Caretaker::Caretaker(){}

客户端:

// main.cpp
#include <iostream>
#include "memo.h"
#include "caretaker.h"
#include "device.h"

using namespace std;

int main(int argc, char *argv[])
{
    Device *dev = new Device();
    dev->m_state_code = 100;
    dev->Show();

    Caretaker *taker = new Caretaker();
    taker->m_memo = dev->CreateMemo();

    dev->m_state_code = 222;
    dev->Show();

    dev->Recover(taker->m_memo);
    dev->Show();

    return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值