最近很长时间没写博客了,其实这个博客写过一半,中间有事耽搁了,就没继续。主要是给别人作了一个小系统,及维护码云上的代码库。同居的日子也占了我不少时间。编程
最近也是烦,欠了7W,各类烦事。因此可想写个博客静静心。编程语言
在面向对象中关注的焦点是对象空间,对象与对象的联系仍是经过保存引用(至关于路),来走到其空间中。学习
在对象中是有空间的,空间里放的确定是数据或者是命令。this
备忘录就是把A对象的空间数据,备份到B对象空间一份。若是A对象与B对象是一个类型的对象,未免浪费B对象的空间,由于我是个性保存数据的,不必定是保存A的全部数据。设计
因此最好把B对象设计成一个专注保存A要保存数据的宿主对象,因为在内存中B对象是要随时用的,那也须要把B对象存起来,存在哪里?创造一个宿主对象C便可。对象
说的太多,直接看例子,我解释。内存
//空间对象get
class GameRole
{
//对象中的数据
private int vit;
public int Vitality
{
get { return vit; }
set { vit = value; }
}博客
private int atk;
public int Attack
{
get { return atk; }
set { atk = value; }
}it
private int def;
public int Defense
{
get { return def; }
set { def = value; }
}
//对象中的命令
public void StateDisplay()
{
Console.WriteLine("角色当前状态:");
Console.WriteLine("体力:{0}", this.vit);
Console.WriteLine("攻击力:{0}", this.atk);
Console.WriteLine("防护力:{0}", this.def);
Console.WriteLine("");
}
public RoleStateMemento SaveState()
{
//要保存的数据,放入数据宿主中
return (new RoleStateMemento(vit, atk, def));
}
//从数据宿主中还原对象
public void RecoveryState(RoleStateMemento memento)
{
this.vit = memento.Vitality;
this.atk = memento.Attack;
this.def = memento.Defense;
}
public void GetInitState()
{
this.vit = 100;
this.atk = 100;
this.def = 100;
}
public void Fight()
{
this.vit = 0;
this.atk = 0;
this.def = 0;
}
}
//数据宿主对象
class RoleStateMemento
{
//其内存的数据
private int vit;
private int atk;
private int def;
public RoleStateMemento(int vit, int atk, int def)
{
this.vit = vit;
this.atk = atk;
this.def = def;
}
public int Vitality
{
get { return vit; }
set { vit = value; }
}
public int Attack
{
get { return atk; }
set { atk = value; }
}
public int Defense
{
get { return def; }
set { def = value; }
}
}
//数据宿主的宿主对象
class RoleStateCaretaker
{
//存的是数据宿主
private RoleStateMemento memento;
public RoleStateMemento Memento
{
get { return memento; }
set { memento = value; }
}
}
//建立对象
GameRole lixiaoyao = new GameRole();
lixiaoyao.GetInitState();
lixiaoyao.StateDisplay();
//把对象的数据存在数据对象宿主中,而后再把数据对象宿主放在另外一个对象中(即数据对象的宿主的宿主对象)
RoleStateCaretaker stateAdmin = new RoleStateCaretaker();
stateAdmin.Memento = lixiaoyao.SaveState();
lixiaoyao.Fight();
lixiaoyao.StateDisplay();
//从数据宿主对象中恢复数据。
lixiaoyao.RecoveryState(stateAdmin.Memento);
lixiaoyao.StateDisplay();
总结,思想的东西是不分语言的,只要有思惟的人类,其思想是互通的。编程语言的核心就是思想。编程语言为了让人类使用,必须适应人类的思惟。
今天到此为止,之后多多学习,我女友说我除了写代码,其余方面就是弱智,哎,人总要有一个爱好的。不然生活好无趣!