這是設計模式的最後一篇,最近事還是挺多,自己的東西還是沒進步。其實我這個人不用和領導套近乎,我有自己的職業素養,工匠精神。我喜歡獨處,喜歡自由,也喜歡女人,我訂婚後也很幸福。 今年我31周歲了,現在不是回想以前的時候,但是還是我應該努力的時候,不停的上進,堅持最後一定會成功!最怕傻逼式的堅持! 朋友 ...
這是設計模式的最後一篇,最近事還是挺多,自己的東西還是沒進步。其實我這個人不用和領導套近乎,我有自己的職業素養,工匠精神。我喜歡獨處,喜歡自由,也喜歡女人,我訂婚後也很幸福。
今年我31周歲了,現在不是回想以前的時候,但是還是我應該努力的時候,不停的上進,堅持最後一定會成功!最怕傻逼式的堅持!
朋友之間相處不要牽扯借錢的事,大錢不借,要麼給。
意思要守住原則,這樣才能長久。
面向過程語言開發時,有句話是演算法+數據=程式。
面向對象開發同樣適用。演算法等於對象引用的方法,數據等於對象中的屬性欄位。
我其他設計模式中一直提,兩個對象要能通信必須能找到對方的(記憶體)空間。
訪問者模式同樣是這個道理:什麼也不說,直接上例子,我來解釋!
//抽象的思路,
abstract class Action
{
//依賴Man對象,即只在這個方法中才能訪問到Man對象
public abstract void GetManConclusion(Man concreteElementA);
public abstract void GetWomanConclusion(Woman concreteElementB);
}
//具體的記憶體對象
class Success : Action
{
public override void GetManConclusion(Man concreteElementA)
{
Console.WriteLine("{0}{1}時,背後多半有一個偉大的女人。", concreteElementA.GetType().Name, this.GetType().Name);
}
public override void GetWomanConclusion(Woman concreteElementB)
{
Console.WriteLine("{0}{1}時,背後大多有一個不成功的男人。", concreteElementB.GetType().Name, this.GetType().Name);
}
}
//不同的狀態(被訪問者訪問)
class Failing : Action
{
public override void GetManConclusion(Man concreteElementA)
{
Console.WriteLine("{0}{1}時,悶頭喝酒,誰也不用勸。", concreteElementA.GetType().Name, this.GetType().Name);
}
public override void GetWomanConclusion(Woman concreteElementB)
{
Console.WriteLine("{0}{1}時,眼淚汪汪,誰也勸不了。", concreteElementB.GetType().Name, this.GetType().Name);
}
}
//抽象類
abstract class Person
{
//在此方法中依賴訪問者對象
public abstract void Accept(Action visitor);
}
//具體實現
class Man : Person
{
public override void Accept(Action visitor)
{
//即對象被訪問
visitor.GetManConclusion(this);
}
}
//對外介面類
class ObjectStructure
{
//對象從數量上分單個和多個
private IList<Person> elements = new List<Person>();
public void Attach(Person element)
{
elements.Add(element);
}
public void Detach(Person element)
{
elements.Remove(element);
}
public void Display(Action visitor)
{
foreach (Person e in elements)
{
//對象接收訪問是對象被訪問。
e.Accept(visitor);
}
}
}
//初始化對象
ObjectStructure o = new ObjectStructure();
o.Attach(new Man());
o.Attach(new Woman());
//對象唄v1訪問
Success v1 = new Success();
o.Display(v1);
Failing v2 = new Failing();
o.Display(v2);
總結,訪問者模式,就是對象被另一個對象訪問。還是那句話,想被訪問,必須公開自己的記憶體地址。
到此,設計模式系列已寫完。
下個系列請期待。
和最開始我說的一樣,我最後寫一個ORM,其實這個orm我已經寫好了,但是由於諸多原因,目前這個orm只能是私人項目。
我最開始說的所有功能,我都是完全自己實現的。裡面的所有代碼都是一行一行敲的。
在此,我把最初的ado操作公佈一下,作為一個拋磚引玉的開始。大家可以看看。
github:https://github.com/WangCharle/Charle.kxs.git
再牛逼的夢想也抵擋不住傻逼式的堅持,大家共勉之!