設計模式:訪問者模式
參考《大話模式》
訪問者模式:表示一個作用於某物件結構中各元素的操作。它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。
它把資料結構和用作於結構上的操作之間的耦合解脫開,使得操作集合可以相對自由演化
訪問者模式的優點就是增加新的操作很容易,因為增加新的操作就意味著增加一個新的訪問者,訪問者模式將有關的行為集中到一個訪問者物件中。
資料結構的每一個節點都可以接受一個訪問者的呼叫,此節點向訪問者物件傳入節點物件,而訪問者物件則反過來執行節點物件的操作。這樣的過程叫做"雙重分派"。節點呼叫訪問者,將它自己傳入,訪問者則將某演算法針對此節點執行。
雙重分派意味著施加於節點之上的操作是基於訪問者和節點本身的資料型別,而不僅僅是其中的一者。
public abstract class Visitor
{
public abstract void VisitorOneElement(OneElement one);
public abstract void VisitorTwoElement(TwoElement Two);
}
public class ConcreteOneVisitor : Visitor
{
public override void VisitorOneElement(OneElement one)
{
Console.WriteLine("{0} visited by {1}",one, this);
}
public override void VisitorTwoElement(TwoElement Two)
{
Console.WriteLine("{0} visited by {1}", Two, this);
}
}
public class ConcreteTwoVisitor : Visitor
{
public override void VisitorOneElement(OneElement one)
{
Console.WriteLine("{0} visited by {1}", one, this);
}
public override void VisitorTwoElement(TwoElement Two)
{
Console.WriteLine("{0} visited by {1}", Two, this);
}
}
public abstract class Element
{
public abstract void Accept(Visitor visitor);
}
public class OneElement : Element
{
public override void Accept(Visitor visitor)
{
visitor.VisitorOneElement(this);
}
}
public class TwoElement : Element
{
public override void Accept(Visitor visitor)
{
visitor.VisitorTwoElement(this);
}
}
//通過該類ObjectStruct把Element和visitor串聯
public class ObjectStruct
{
private ArrayList list = new ArrayList();
public void Attach(Element element)
{
list.Add(element);
}
public void Detach(Element element)
{
list.Remove(element);
}
//展示
public void ObjectAccept(Visitor visitor)
{
foreach (Element e in list)
{
e.Accept(visitor);
}
}
}
訪問者模式:表示一個作用於某物件結構中各元素的操作。它使你可以在不改變各元素的類的前提下定義作用於這些元素的新操作。
它把資料結構和用作於結構上的操作之間的耦合解脫開,使得操作集合可以相對自由演化
訪問者模式的優點就是增加新的操作很容易,因為增加新的操作就意味著增加一個新的訪問者,訪問者模式將有關的行為集中到一個訪問者物件中。
資料結構的每一個節點都可以接受一個訪問者的呼叫,此節點向訪問者物件傳入節點物件,而訪問者物件則反過來執行節點物件的操作。這樣的過程叫做"雙重分派"。節點呼叫訪問者,將它自己傳入,訪問者則將某演算法針對此節點執行。
雙重分派意味著施加於節點之上的操作是基於訪問者和節點本身的資料型別,而不僅僅是其中的一者。
public abstract class Visitor
{
public abstract void VisitorOneElement(OneElement one);
public abstract void VisitorTwoElement(TwoElement Two);
}
public class ConcreteOneVisitor : Visitor
{
public override void VisitorOneElement(OneElement one)
{
Console.WriteLine("{0} visited by {1}",one, this);
}
public override void VisitorTwoElement(TwoElement Two)
{
Console.WriteLine("{0} visited by {1}", Two, this);
}
}
public class ConcreteTwoVisitor : Visitor
{
public override void VisitorOneElement(OneElement one)
{
Console.WriteLine("{0} visited by {1}", one, this);
}
public override void VisitorTwoElement(TwoElement Two)
{
Console.WriteLine("{0} visited by {1}", Two, this);
}
}
public abstract class Element
{
public abstract void Accept(Visitor visitor);
}
public class OneElement : Element
{
public override void Accept(Visitor visitor)
{
visitor.VisitorOneElement(this);
}
}
public class TwoElement : Element
{
public override void Accept(Visitor visitor)
{
visitor.VisitorTwoElement(this);
}
}
//通過該類ObjectStruct把Element和visitor串聯
public class ObjectStruct
{
private ArrayList list = new ArrayList();
public void Attach(Element element)
{
list.Add(element);
}
public void Detach(Element element)
{
list.Remove(element);
}
//展示
public void ObjectAccept(Visitor visitor)
{
foreach (Element e in list)
{
e.Accept(visitor);
}
}
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29012686/viewspace-1127125/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 設計模式(十六)——訪問者模式設計模式
- 極簡設計模式-訪問者模式設計模式
- 設計模式 - ASM 中的訪問者模式設計模式ASM
- 設計模式學習之訪問者模式設計模式
- C#設計模式之訪問者模式C#設計模式
- 【趣味設計模式系列】之【訪問者模式】設計模式
- 15.java設計模式之訪問者模式Java設計模式
- Android理解設計模式之組合模式、迭代器模式、訪問者模式Android設計模式
- 設計模式(二十三)訪問者設計模式
- Java進階篇設計模式之十 ---- 訪問者模式和中介者模式Java設計模式
- 設計模式學習-使用go實現訪問者模式設計模式Go
- 「補課」進行時:設計模式(18)——訪問者模式設計模式
- 軟體設計模式系列之二十五——訪問者模式設計模式
- 軟體設計模式學習(二十七)訪問者模式設計模式
- 訪問者模式模式
- 行為模式-訪問者模式模式
- C++設計模式 - 訪問器模式(Visitor)C++設計模式
- 【設計模式】詳解訪問者(Visitor)模式-有多段程式碼出沒設計模式
- 設計模式學習筆記(二十一)訪問者模式及其實現設計模式筆記
- 聊聊OOP中的設計原則以及訪問者模式OOP模式
- python-訪問者模式Python模式
- GoLang設計模式17 - 訪客模式Golang設計模式
- 設計模式----建造者模式設計模式
- 設計模式(建造者模式)設計模式
- 設計模式 | 建造者模式設計模式
- 設計模式 --建造者模式設計模式
- 設計模式-建造者模式設計模式
- 設計模式 —— 建造者模式設計模式
- 深入淺出訪問者模式模式
- DesignPattern_訪問者模式_19模式
- PHP設計模式-DAO (Data Access Objects) 資料訪問物件模式PHP設計模式Object物件
- 設計模式 —— 觀察者模式設計模式
- 設計模式-適配者模式設計模式
- 設計模式——裝飾者模式設計模式
- 設計模式(觀察者模式)設計模式
- java設計模式-建造者模式Java設計模式
- 設計模式----觀察者模式設計模式
- 設計模式-裝飾者模式設計模式
- 設計模式之中介者模式設計模式