visitorstructural.cs
来自「使用C#程序将23个常用设计模式进行列表显示」· CS 代码 · 共 118 行
CS
118 行
using System;
using System.Windows.Forms;
using System.Collections;
namespace DesignPattern.VisitorStructural
{
class VisitorStructural : AbstractPattern
{
public static void Run(TextBox tbInfo)
{
s_tbInfo = tbInfo;
s_tbInfo.Text = "";
// Setup structure
ObjectStructure o = new ObjectStructure();
o.Attach(new ConcreteElementA());
o.Attach(new ConcreteElementB());
// Create visitor objects
ConcreteVisitor1 v1 = new ConcreteVisitor1();
ConcreteVisitor2 v2 = new ConcreteVisitor2();
// Structure accepting visitors
o.Accept(v1);
o.Accept(v2);
// Wait for user
//Console.Read();
}
}
// "Visitor"
abstract class Visitor
{
public abstract void VisitConcreteElementA( ConcreteElementA concreteElementA);
public abstract void VisitConcreteElementB( ConcreteElementB concreteElementB);
}
// "ConcreteVisitor1"
class ConcreteVisitor1 : Visitor
{
public override void VisitConcreteElementA( ConcreteElementA concreteElementA)
{
DesignPattern.FormMain.OutputInfo("{0} visited by {1}", concreteElementA.GetType().Name, this.GetType().Name);
}
public override void VisitConcreteElementB( ConcreteElementB concreteElementB)
{
DesignPattern.FormMain.OutputInfo("{0} visited by {1}", concreteElementB.GetType().Name, this.GetType().Name);
}
}
// "ConcreteVisitor2"
class ConcreteVisitor2 : Visitor
{
public override void VisitConcreteElementA( ConcreteElementA concreteElementA)
{
DesignPattern.FormMain.OutputInfo("{0} visited by {1}", concreteElementA.GetType().Name, this.GetType().Name);
}
public override void VisitConcreteElementB( ConcreteElementB concreteElementB)
{
DesignPattern.FormMain.OutputInfo("{0} visited by {1}", concreteElementB.GetType().Name, this.GetType().Name);
}
}
// "Element"
abstract class Element
{
public abstract void Accept(Visitor visitor);
}
// "ConcreteElementA"
class ConcreteElementA : Element
{
public override void Accept(Visitor visitor)
{
visitor.VisitConcreteElementA(this);
}
public void OperationA()
{
}
}
// "ConcreteElementB"
class ConcreteElementB : Element
{
public override void Accept(Visitor visitor)
{
visitor.VisitConcreteElementB(this);
}
public void OperationB() { }
}
// "ObjectStructure"
class ObjectStructure
{
private ArrayList elements = new ArrayList();
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);
}
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?