dev*_*ium 8 c# oop design-patterns
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);
}
}
Run Code Online (Sandbox Code Playgroud)
现在这是我做的一位访客:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
为什么这比仅仅放置一个公共财产歌曲更好,然后让任何类别的人做它想做的任何事情?
这个例子来自这篇文章.
Har*_*ich 10
这主要是因为该示例是访问者模式的一个不好的例子.访问者模式的目的是为一组对象添加通用功能,而不必从同一个类派生.它允许您继续向类添加功能,而无需自己更改类.您引用的答案中较长的水果示例是对访客模式的更好解释.
阅读引用的维基百科文章,为了获得回报,您应该拥有一组课程.在你的情况下,不同的类不是真正的保证,因此不需要访问者模式.给定一个更加异构的类结构,访问者模式可能会变得有用.
| 归档时间: |
|
| 查看次数: |
6523 次 |
| 最近记录: |