どちらの手法を使用することにも大きなメリットはありますか?バリエーションがある場合、私が意味するビジターパターンはこれです:http://en.wikipedia.org/wiki/Visitor_pattern
そして、以下は同じ効果を達成するためにデリゲートを使用する例です(少なくとも私はそれが同じだと思います)
ネストされた要素のコレクションがあるとします。学校には、学生を含む学部が含まれます
ビジターパターンを使用して各コレクションアイテムで何かを実行する代わりに、単純なコールバックを使用してみませんか(C#のアクションデリゲート)
このようなことを言う
class Department
{
List Students;
}
class School
{
List Departments;
VisitStudents(Action<Student> actionDelegate)
{
foreach(var dep in this.Departments)
{
foreach(var stu in dep.Students)
{
actionDelegate(stu);
}
}
}
}
School A = new School();
...//populate collections
A.Visit((student)=> { ...Do Something with student... });
*複数のパラメータを受け入れるデリゲートを使用したEDITの例
学生と学部の両方に合格したいとします。次のようにアクション定義を変更できます。アクション
class School
{
List Departments;
VisitStudents(Action<Student, Department> actionDelegate, Action<Department> d2)
{
foreach(var dep in this.Departments)
{
d2(dep); //This performs a different process.
//Using Visitor pattern would avoid having to keep adding new delegates.
//This looks like the main benefit so far
foreach(var stu in dep.Students)
{
actionDelegate(stu, dep);
}
}
}
}