备忘录模式


#include 
#include 
#include 

class Momento {
public:
    Momento(std::string state) { this->state_ = state; }
    std::string state() { return state_; }
private:
    std::string state_ = "";
};

class Originator {
public:
    std::shared_ptr save() { return std::make_shared(state_); }
    void setState(std::string state) { this->state_ = state; }
    void restore(std::shared_ptr m) { this->state_ = m->state(); }
    void show() { std::cout << "In Originator show(). The state is " << state_ << std::endl; }
private:
    std::string state_ = "";
};

class Caretaker {
public:
    Caretaker(std::shared_ptr o) { this->o = o; }
    void backUp() {
        std::shared_ptr m = o->save();
        mv.push_back(m);
    }
    void undo() {
        if(!mv.empty()) {
            mv.pop_back();
            if(!mv.empty()) {
                o->restore(mv.back());
            }
        }
    }
private:
    std::shared_ptr o = nullptr;
    std::vector> mv;
};

int main(int argc, char *argv[]) {
    std::shared_ptr o = std::make_shared();
    std::shared_ptr c = std::make_shared(o);
    o->setState("1");
    o->show();
    c->backUp();
    o->setState("2");
    c->backUp();
    o->show();
    c->undo();
    o->show();
    return 1;
}