Design Patterns in C Visitor www devbg orgpatternscourse

Design Patterns in C# Visitor www. devbg. org/patternscourse/ Радослав Иванов














Примерна реализация // Visitor pattern -- Structural example using System; using System. Collections; // "Visitor" abstract class Visitor { public abstract void Visit. Concrete. Element. A( Concrete. Element. A concrete. Element. A); } public abstract void Visit. Concrete. Element. B( Concrete. Element. B concrete. Element. B); (примерът продължава)

Примерна реализация // "Concrete. Visitor 1" class Concrete. Visitor 1 : Visitor { public override void Visit. Concrete. Element. A( Concrete. Element. A concrete. Element. A) { Console. Write. Line("{0} visited by {1}", concrete. Element. A. Get. Type(). Name, this. Get. Type(). Name); } } public override void Visit. Concrete. Element. B( Concrete. Element. B concrete. Element. B) { Console. Write. Line("{0} visited by {1}", concrete. Element. B. Get. Type(). Name, this. Get. Type(). Name); } (примерът продължава)

Примерна реализация // "Concrete. Visitor 2" class Concrete. Visitor 2 : Visitor { public override void Visit. Concrete. Element. A( Concrete. Element. A concrete. Element. A) { Console. Write. Line("{0} visited by {1}", concrete. Element. A. Get. Type(). Name, this. Get. Type(). Name); } } public override void Visit. Concrete. Element. B( Concrete. Element. B concrete. Element. B) { Console. Write. Line("{0} visited by {1}", concrete. Element. B. Get. Type(). Name, this. Get. Type(). Name); } (примерът продължава)

Примерна реализация // "Element" abstract class Element { public abstract void Accept(Visitor visitor); } // "Concrete. Element. A" class Concrete. Element. A : Element { public override void Accept(Visitor visitor) { visitor. Visit. Concrete. Element. A(this); } } public void Operation. A() { } (примерът продължава)

Примерна реализация // "Concrete. Element. B" class Concrete. Element. B : Element { public override void Accept(Visitor visitor) { visitor. Visit. Concrete. Element. B(this); } } public void Operation. B() { } (примерът продължава)

Примерна реализация // "Object. Structure" class Object. Structure { private Array. List elements = new Array. List(); public void Attach(Element element) { elements. Add(element); } public void Detach(Element element) { elements. Remove(element); } public void Accept(Visitor visitor) { foreach (Element e in elements) { e. Accept(visitor); } } } (примерът продължава)

Примерна реализация class Main. Application { static void Main() { // Setup structure Object. Structure structure = new Object. Structure(); structure. Attach(new Concrete. Element. A()); structure. Attach(new Concrete. Element. B()); // Create visitor objects Concrete. Visitor 1 v 1 = new Concrete. Visitor 1(); Concrete. Visitor 2 v 2 = new Concrete. Visitor 2(); // Structure accepting visitors structure. Accept(v 1); structure. Accept(v 2); } // Wait for user Console. Read();






Посетител (Visitor) Въпроси? www. devbg. org/patternscourse/

- Slides: 28