namespace Pattern.Visitor
{
public abstract class AbstractVisitor
{
public abstract string Visit(AbstractElement abstractElement);
}
}
namespace Pattern.Visitor
{
public class InsertVisitor : AbstractVisitor
{
public override string Visit(AbstractElement abstractElement)
{
Message m = abstractElement as Message;
return m.Insert().ToString() + "<br />";
}
}
}
namespace Pattern.Visitor
{
public class GetVisitor : AbstractVisitor
{
public override string Visit(AbstractElement abstractElement)
{
Message m = abstractElement as Message;
return m.Get()[0].Message + " " + m.Get()[0].PublishTime.ToString() + "<br />";
}
}
}
兩個具體訪問者分別封裝對 Message 物件的 Insert 與 Get 操作,符合「開放封閉原則」,新增操作只需新增 Visitor 而不修改 Element 階層。