备忘录模式(C++)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013421892/article/details/81045731

下午无聊, 复习了下备忘录模式,顺便做个笔记,日后也许用得上那,对吧。

备忘录模式:在不破坏封装的前提下,获取一个对象的内部状态,并在该对象之外包这个状态 。

这样做的目的就是可以恢复该对象的状态。例如,我们的每个车的上不是有个radio吗?在夏天我们在开车时会开启空调,然后听听歌,将空调温度,播放歌曲音量调节到合适的数值,当下次开车时希望其恢复到上一次调节的状态,而不是重新调节温度和音量。这时如果让你来设计,我们可以这样做,定义一个类,收集需要保存的东西,即保存内部信息;然后定义一个类来保存对应数据,即在该对象之外保存数据;最后定义一个管理这些数据的类,在需要时恢复到原来的状态。这就是备忘录模式,具体可以看下面UML类图:
这里写图片描述
对应代码如下:

#include <iostream>
#include <vector>
using namespace std;

class Pss
{
public:
    int m_volume;
    int m_temperature;
public:
    Pss(int vol, int tem) :m_volume(vol), m_temperature(tem)
    {}

    Pss& operator=(const Pss& pss)
    {
        m_volume = pss.m_volume;
        m_temperature = pss.m_temperature;
        return *this;
    }
};

class VwRadio
{
private:
    int m_volume;
    int m_temperature;
public:
    VwRadio():m_volume(20), m_temperature(20)
    {}

    Pss Save()
    {
        Pss pss(m_volume, m_temperature);
        return pss;
    }

    void Load(Pss pss)
    {
        m_volume = pss.m_volume;
        m_temperature = pss.m_temperature;
    }

    void Show()
    {
        cout << m_volume << ", " << m_temperature << endl;
    }

    void Change()
    {
        m_volume += 10;
        m_temperature += 10;
    }
};

class Administrator
{
public:
    Administrator(){}
    void Save(Pss pss)
    {
        m_pss.push_back(pss);
    }

    Pss Load(int state)
    {
        return m_pss[state];
    }

private:
    vector<Pss> m_pss;
};

int main(int argc, char** argv)
{
    Administrator admin;
    VwRadio radio;
    radio.Show();
    admin.Save(radio.Save());
    radio.Change();
    radio.Show();
    admin.Save(radio.Save());
    radio.Load(admin.Load(1));
    radio.Show();

    return 0;
}

以上代码在VS2015运行通过。

猜你喜欢

转载自blog.csdn.net/u013421892/article/details/81045731