zoukankan      html  css  js  c++  java
  • 备忘录模式

    一、简介

    1、备忘录 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。

    2、模式成员

    (1)Originator(发起人):负责创建一个Memento(备忘录),用以记录当前的状态,并且可以使用备忘录恢复自己的状态。

    (2)Memento(备忘录):负责存储Originator对象的内部状态,并可防止Originator以外的其他对象访问备忘录。

    (3)Caretaker(管理者):负责保存好备忘录,不能对备忘录的内容进行操作或者检查。

    3、UML

    4、所属类别:行为型

    二、C++程序

     1 // 备忘录模式.cpp : 定义控制台应用程序的入口点。
     2 //
     3 
     4 #include "stdafx.h"
     5 #include<iostream>
     6 #include<string>
     7 using namespace std;
     8 class Memento
     9 {
    10 private:
    11     string state;
    12 public:
    13     Memento(string s)
    14     {
    15         state=s;
    16     }
    17     ~Memento(){}
    18     string get()
    19     {
    20         return state;
    21     }
    22 };
    23 
    24 class Originator
    25 {
    26 private:
    27     string state;//需要备份的内容
    28 public:
    29     Originator(){}
    30     ~Originator(){}
    31     void set_state(string s)
    32     {
    33         state=s;
    34     }
    35     void show_state()
    36     {
    37         cout<<state<<endl;
    38     }
    39     Memento * creat_Memento()  //备份状态
    40     {
    41         return new Memento(state);
    42     }
    43     void revover_state(Memento* s)//恢复状态
    44     {
    45         state=s->get();
    46     }
    47 };
    48 
    49 class Caretaker
    50 {
    51 private:
    52     Memento * memento;
    53 public:
    54     Caretaker(){}
    55     ~Caretaker(){}
    56     void set(Memento * m)
    57     {
    58         memento=m;
    59     }
    60     Memento* get()
    61     {
    62         return memento;
    63     }
    64 };
    65 
    66 int _tmain(int argc, _TCHAR* argv[])
    67 {
    68     Originator* led=new Originator();3
    69     led->set_state("on");
    70 
    71     Caretaker *save=new Caretaker();
    72     save->set(led->creat_Memento());//备份
    73     led->show_state();
    74 
    75     led->set_state("off");
    76     led->show_state();
    77 
    78     led->revover_state(save->get());
    79     led->show_state();
    80 
    81     return 0;
    82 }
  • 相关阅读:
    Es module vs require
    phaser3 画虚线实现
    新的计划
    [转]Boostrap Table的refresh和refreshOptions区别
    Storing Java objects in MySQL blobs
    【转】Ubuntu下搜狗输入法突然无法输入中文
    团队作业六
    团队作业七
    团队作业四
    团队作业三
  • 原文地址:https://www.cnblogs.com/bewolf/p/4238881.html
Copyright © 2011-2022 走看看