zoukankan      html  css  js  c++  java
  • 设计模式-(Memento)在不破坏封装性的前提下,捕捉类内的一个状态信息,并根据这个信息进行恢复。

    以下代码来源: 设计模式精解-GoF 23种设计模式解析附C++实现源码

    //Memento.h

    #pragma once
    #include<string>
    
    class Memento;
    class Originator{
    public:
        typedef std::string State;
        Originator();
        virtual ~Originator();
        Originator(const State& st);
        Memento* createMemento();
        void SetMemento(Memento* men);
        void RestoreMemento(Memento* mt);
        State Getstate();
        void Setstate(const State&sdt);
        void PrintState();
    protected:
    private:
        Memento* _mt;
        State _st;
    };
    
    class Memento
    {
    public:
    protected:
    private:
        friend class Originator;
        typedef std::string state;
        Memento();
        virtual ~Memento();
        Memento(const state &sdt);
        void SetState(const state& sdt);
        state GetState();
        state _st;
    };

    //Memento.cpp

    #include"Memento.h"
    #include<iostream>
    typedef std::string state;
    Originator::Originator()
    {
        _st = '';
        _mt = 0;
    }
    Originator::Originator(const state & sdt)
    {
        _st = sdt;
        _mt = 0;
    }
    Originator::~Originator(){}
    Memento* Originator::createMemento()
    {
        return new Memento(_st);
    }
    
    void Originator::SetMemento(Memento* mem)
    {
    
    }
    state Originator::Getstate()
    {
        return _st;
    }
    
    void Originator::Setstate(const state&sdt)
    {
        _st = sdt;
    }
    
    void Originator::PrintState()
    {
        std::cout << this->_st << "...." << std::endl;
    }
    
    void Originator::RestoreMemento(Memento* mn)
    {
        this->_st = mn->GetState();
    }
    
    Memento::Memento(){}
    Memento::~Memento(){}
    Memento::Memento(const state& sdt)
    {
        _st = sdt;
    }
    
    state Memento::GetState()
    {
        return _st;
    }
    
    void Memento::SetState(const state& sdt)
    {
        _st = sdt;
    }

    //main.cpp

    #include"Memento.h"
    #include<iostream>
    #include<string>
    
    int main(int args, char* argv)
    {
        Originator* o = new Originator();
        o->Setstate("Old");
        o->PrintState();
        Memento* m = o->createMemento();
        o->Setstate("New");
        o->PrintState();
        o->RestoreMemento(m);
        o->PrintState();
        getchar();
        return 0;
    }
  • 相关阅读:
    pandas函数
    实战应用--基于物品的协同过滤算法itemCF
    Hadoop--mapreduce知识点总结
    HDFS知识点总结
    学习随笔 --python连接oracle数据库
    学习随笔 --python实现熵权法
    学习随笔 --SparkStreaming WordCount Python实现
    学习随笔 --SparkStreaming WordCount Java实现
    学习随笔--JavaSparkJDBC操作Oracle
    Anaconda和canda简介及区别
  • 原文地址:https://www.cnblogs.com/fourmi/p/12083677.html
Copyright © 2011-2022 走看看