設計模式漫談之訪問者模式

這是設計模式的最後一篇,最近事仍是挺多,本身的東西仍是沒進步。其實我這我的不用和領導套近乎,我有本身的職業素養,工匠精神。我喜歡獨處,喜歡自由,也喜歡女人,我訂婚後也很幸福。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再牛逼的夢想也抵擋不住傻逼式的堅持,你們共勉之!
相關文章
相關標籤/搜索