最近很長時間沒寫部落格了,其實這個部落格寫過一半,中間有事耽擱了,就沒繼續。主要是給別人做了一個小系統,及維護碼雲上的程式碼庫。同居的日子也佔了我很多時間。
最近也是煩,欠了7W,各種煩事。所以可想寫個部落格靜靜心。
在物件導向中關注的焦點是物件空間,物件與物件的聯絡還是通過儲存引用(相當於路),來走到其空間中。
在物件中是有空間的,空間裡放的肯定是資料或者是命令。
備忘錄就是把A物件的空間資料,備份到B物件空間一份。如果A物件與B物件是一個型別的物件,未免浪費B物件的空間,因為我是個性儲存資料的,不一定是儲存A的所有資料。
所以最好把B物件設計成一個專一儲存A要儲存資料的宿主物件,由於在記憶體中B物件是要隨時用的,那也需要把B物件存起來,存在哪裡?創造一個宿主物件C即可。
說的太多,直接看例子,我解釋。
//空間物件
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; }
}
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();
總結,思想的東西是不分語言的,只要有思維的人類,其思想是互通的。程式語言的核心就是思想。程式語言為了讓人類使用,必須適應人類的思維。
今天到此為止,以後多多學習,我女朋友說我除了寫程式碼,其他方面就是弱智,哎,人總要有一個愛好的。否則生活好無趣!