您的位置:首页 > 其它

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

2015-02-24 16:17 411 查看

引言:

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

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

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

备忘录模式:

结构图:



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

介绍:

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

优点:

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

缺点:

消耗资源。如果类的成员变量过多,势必会占用比较大的资源,而且每一次保存都会消耗一定的内存。

使用场景:

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

自考记忆举例:

备注:

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

客户端主要代码:

[csharp]
view plaincopyprint?





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();
}

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类:

[csharp]
view plaincopyprint?





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);
}

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类:

[csharp]
view plaincopyprint?





class MemoryMemento

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

}
public string Economics

{
get { return economics; }

}
}

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

Caretaker类:

[csharp]
view plaincopyprint?





class Brain
{
private MemoryMemento memento;

public MemoryMemento Memento

{
get { return memento; }

set { memento = value; }

}
}

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

最后运行结果:



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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: