public class Song {
public string Genre { get; protected set; }
public string Name { get; protected set; }
public string Band { get; protected set; }
public Song(string name, string band, string genre) {
Name = name;
Genre = genre;
Band = band;
}
}
public interface IMusicVisistor
{
void Visit(List<Song> items);
}
public class MusicLibrary {
List<Song> _songs = new List<Song> { ...songs ... };
public void Accept(IMusicVisitor visitor) {
visitor.Visit(_songs);
}
}
现在这是我创建的一位访客:
public class RockMusicVisitor : IMusicVisitor {
public List<Song> Songs { get; protected set; }
public void Visit(List<Song> items) {
Songs = items.Where(x => x.Genre == "Rock").ToList();
}
}
为什么这比仅仅放置一个公共财产 Songs 然后让任何类型的类用它做任何它想做的事情更好呢?
这个例子来自于这个post https://stackoverflow.com/questions/2604169/could-someone-in-simple-terms-explain-to-me-the-visitor-patterns-purpose-with-ex/2604294#2604294.
这主要是因为该示例是访问者模式的一个不好的示例。访问者模式的目的是向一组对象添加通用功能,而不必从同一类派生。它允许您不断向类添加功能,而无需更改类本身。您引用的答案中较长的水果示例可以更好地解释访客模式。
阅读引用的维基百科文章,为了让访问者付出代价,你应该有一组课程。在您的情况下,并没有真正保证不同的类,因此不需要访问者模式。考虑到更加异构的类结构,访问者模式可能会变得有用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)