這是設計模式的最後一篇,最近事仍是挺多,本身的東西仍是沒進步。其實我這我的不用和領導套近乎,我有本身的職業素養,工匠精神。我喜歡獨處,喜歡自由,也喜歡女人,我訂婚後也很幸福。git
今年我31週歲了,如今不是回想之前的時候,可是仍是我應該努力的時候,不停的上進,堅持最後必定會成功!最怕傻逼式的堅持!github
朋友之間相處不要牽扯借錢的事,大錢不借,要麼給。算法
意思要守住原則,這樣才能長久。設計模式
面向過程語言開發時,有句話是算法+數據=程序。ide
面向對象開發一樣適用。算法等於對象引用的方法,數據等於對象中的屬性字段。this
我其餘設計模式中一直提,兩個對象要能通訊必須能找到對方的(內存)空間。設計
訪問者模式一樣是這個道理:什麼也不說,直接上例子,我來解釋!3d
//抽象的思路,orm
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再牛逼的夢想也抵擋不住傻逼式的堅持,你們共勉之!