首页 > 代码库 > 自考感悟,话谈备忘录模式

自考感悟,话谈备忘录模式

引言:

    2014年4月20号上午11:30,正式结束了自己的自学考试!考完之后瞬间感觉放松了开来!全身无力则是自己20号下午的唯一感受。放松了半天,今天回归正轨!又回到了和生活息息相关的设计模式上来!今天就用备忘录模式来记录一下自己这次的自考感受吧!

    考试有喜有忧,对于数据库来讲,因为考试了一遍,这次又一次回到考场上,产生出了不一样的快感吧!最起码态度有了转变,解题方式上也有了提高;昨天上午考的管理经济学也许是自己这次感觉最顺利的一科!也许是有计算题的原因吧!相比之下,信息资源管理就显得令自己充满了无奈!

    在考场上,也许每一个人都会遇到这种问题,这个问题当初自己看的非常认真,但是当考场上真的出现了自己所谓的重点的时候,又会不自觉的责备一下自己,为何当初自己不再认真点呢?这样自己就能够拿满分了!今天就用备忘录模式来帮助一下自己,记录一下自己的以前的记忆吧!即所谓的“懊悔药机制”

备忘录模式:

结构图:


Originator:负责创建一个Memento,用以记录当前时刻它的内部状态,并可使用备忘录回复内部状态。
Memento:负责存储Originator对象的内部状态,并可防止Originator以外的其它对象訪问Memento。
Caretaker:负责保存好Memento,不能对备忘录的内容进行操作或检查。

介绍:

备忘录模式,又叫快照模式(Snapshot Pattern)或Token模式,是行为模式的一种。

长处:

1)给用户提供了一种能够恢复状态的机制。能够是用户能够比較方便地回到某个历史的状态。
2)实现了信息的封装。使得用户不须要关心状态的保存细节。

缺点:

消耗资源。假设类的成员变量过多,势必会占用比較大的资源,并且每一次保存都会消耗一定的内存。

使用场景:

    Memento模式比較适用于功能比較复杂的,但须要维护或记录属性历史的类,或者须要保存的属性仅仅是众多属性中的一小部分时,Originator能够依据保存的Memento信息还原到前一状态。
总结点:
    1)须要保存一个对象在某一个时刻的状态或部分状态;2)假设用一个接口来让其他对象得到这些状态,将会暴漏对象的实现,通过负责人能够间接訪问其内部状态。

自考记忆举例:

备注:

       考试的时候自己每次遇到一个题目,总会从大脑中搜索相关的知识,一下的过程则是简单的描写叙述了一下知识存储于大脑以及从大脑搜索的过程!

client主要代码:

 static void Main(string[] args)
        {
            Memory memory = new Memory();
            memory.Economics = "这个知识点属于管理经济学的内容模块";
            memory.ShowEconomicsName();

            Brain B = new Brain();
            B.Memento = memory.Savekind();   //记忆存储

            memory.Economics = "这个知识点已经归纳到大脑中内容模块";
            memory.ShowEconomicsName();

            //从大脑中查找
            memory.Seek(B.Memento);
            memory.ShowEconomicsName();
        }

Originator类:

class Memory
        {
            private string economics;
            public string Economics
            {
                get { return economics; }
                set { economics= value; }

            }
            //经济学管理存储
            public MemoryMemento Savekind()
            {
                Console.WriteLine("内容模块已在大脑中存储");
                return (new MemoryMemento(economics));
            }
            //查找
            public void Seek(MemoryMemento MM)
            {
                economics = MM.Economics;
                Console.WriteLine("已从大脑中搜索到经济管理学内容模块");
            }
            public void ShowEconomicsName()
            {
                Console.WriteLine(economics);
            }

Memento类:

class MemoryMemento
        {
            private string economics;
            public MemoryMemento (string economics)  //在记忆时对内容要总结
            {
                this.economics = economics;
            }
            public string Economics
            {
                get { return economics; }
            }
        }

Caretaker类:

 class  Brain
        {
            private MemoryMemento memento;
            public MemoryMemento Memento
            {
                get { return memento; }
                set { memento = value; }
            }
        }

最后执行结果:


    第二次自考就这样结束了!当中经历了非常好的GTD,同一时候也由于上次不理想的原因小小烦躁了一段时间,可是最后想想备忘录这个大功能,相信在GTD的非常好辅助下,自己也全然能够做到!为自己的第三次自考加油!