gpt4 book ai didi

c# - 访客模式示例

转载 作者:太空狗 更新时间:2023-10-29 18:26:04 25 4
gpt4 key购买 nike

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();
}
}

为什么这比仅仅放置一个公共(public)属性 Songs 然后让任何类型的类用它做任何它想做的事更好呢?

这个例子来自这个post .

最佳答案

主要是因为这个例子是访问者模式的坏例子。访问者模式的目的是向一组对象添加通用功能,而不必从同一个类派生。它使您可以不断向类添加功能,而无需更改类本身。您引用的答案中较长的水果示例更好地解释了访问者模式。

阅读引用的维基百科文章,为了让访问者获得返回,您应该有一组类(class)。在你的情况下,不同的类并不是真正必要的,所以不需要访问者模式。给定一个更加异构的类结构,访问者模式可能会变得有用。

关于c# - 访客模式示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2612987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com