public class Messages
{
private List _list = new List();
public void Attach(Message message) => _list.Add(message);
public void Detach(Message message) => _list.Remove(message);
public string Accept(AbstractVisitor visitor)
{
string s = "";
foreach (Message m in _list)
s += m.Accept(visitor);
return s;
}
}
var msgs = new Messages();
msgs.Attach(new SqlMessage(new MessageModel("插入", DateTime.Now)));
msgs.Attach(new XMLMessage(new MessageModel("插入", DateTime.Now)));
Response.Write(msgs.Accept(new InsertVisitor()));
Response.Write(msgs.Accept(new GetVisitor()));
True True SQL方式獲取Message 2007-5-27 15:01:53 XML方式獲取Message 2007-5-27 15:01:53
InsertVisitor 遍歷執行所有元素的 Insert(),GetVisitor 執行 Get()。**新增操作 (如 DeleteVisitor) 無需修改任何元素類別** — 訪問者模式核心價值:在不改變元素類的前提下定義新操作。