访客模式示例

2024-03-27

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(使用前将#替换为@)

访客模式示例 的相关文章

随机推荐

  • ContentObserver 在 Android 中不工作

    您好 我正在尝试使用下面的代码 内容解析器不适用于此 任何人都可以给出一个想法 getContentResolver registerContentObserver MyContentProvider CONTENT URI true ne
  • 在 ruby​​ HAML 中指定过滤器的选项

    有没有办法向 HAML 过滤器添加选项 HTML 属性 我想做这样的事情 javascript data turbolinks eval gt false foo gt bar if someCondition doSomething 结果
  • 嵌入式所见即所得方程编辑器[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 您知道用 javascript mathml 或 Flash 实现的所见即所得方程编辑器 例如 Drag
  • CodeIgniter 会话 set-cookie 重复 - 如何解决

    UPDATE 我想知道是否有人可以查看我的答案并看看其中是否有任何漏洞 使用 codeigniter 和会话时存在一个有据可查的问题 codeigniter 标头中重复的 set cookie ci session 字段 https sta
  • 具有以字符串开头的属性的元素的 jQuery 选择器

    我需要选择所有具有以给定前缀开头的属性的元素 注意我说的是属性名称 not价值 例如 div div a href a span span 在上面的 HTML 中 我需要获取具有以下属性开头的所有元素data abc 那就是div和a 我怎
  • 如何使用官方Python客户端从Pod中查找同一节点上的所有Kubernetes Pod?

    如何使用官方 Python Kubernetes 客户端获取与我自己的 特权 pod 在同一 Kubernetes 节点上运行的 pod 列表 也就是说 Pod 如何识别其运行的具体 Kubernetes 节点 然后仅查询该节点上的完整 P
  • 尽管访问了正确的广告代码,但 Google DFP 广告素材还是随机显示

    我正在使用 Android 版 Google DFP DoubleClick for Publishers 广告 和 iPhone 设备 我想在特定的屏幕尺寸上展示广告 适用于 iOS 和 Android 中横向模式下的应用程序 我已经创建
  • 如何在Android中截取应用程序屏幕的屏幕截图?

    我正在开发一个应用程序 我必须在其中截取应用程序屏幕的屏幕截图 现在我使用下面的代码它不起作用 我是空位图图像 Process sh Runtime getRuntime exec su null null OutputStream os
  • Python 字典中数组的交集

    我有数组字典 如下所示 y dict 1 np array 5 124 169 111 122 184 2 np array 1 2 3 4 5 6 111 184 3 np array 169 5 111 152 4 np array 0
  • TabControl的SelectionChanged事件问题

    我正在 WPF 上工作 我正在创建一个 userControl 其中包含一个 TabControl 其中有一些 TabItem 当所选选项卡更改时 我需要执行一些操作 因此 我尝试做的是使用该事件myTabControl Selection
  • 如何在 PHP 中查找并打印两个数字之间的所有数字?

    现在我要求用户提供两个号码 我正在尝试打印 one 和 two 之间的数字 假设 one 小于 two range http php net manual en function range php给出一个包含所有数字的数组 您可以迭代它
  • 字符串到整数

    假设你有字符串 Hi 你如何得到一个值8 9 H 是字母表中的第 8 个字母 并且 i 是第 9 个字母 然后说 添加1到这些整数并使其9 10然后可以将其重新放入字符串中 Ij 是否可以 Note卡里 斯沃夫兰 Cary Swovelan
  • 创建独特的页面标题 slugs php

    我有一个为页面标题创建独特的标题的功能 它检查该 slug 在页面表中是否可用 然后通过相应地添加 int 来创建唯一的 slug 该函数对于前三个条目运行良好 例如 输入三次 test slug 将创建 test slug 1 test
  • R:如何组合三个数据帧的A列和B列相同的行,并添加相应的C列[重复]

    这个问题在这里已经有答案了 我有一些数据框 如果它们的前两列相同 我想合并它们 并添加相应的第三列 例如 我有三个数据框 如下所示 gt dump1 a b c q 12 2 w 23 3 e 34 4 gt dump2 a b c q 1
  • 将 ldapjs 与 Bluebird Promise 结合使用

    我在这里发布了类似的内容 使用带有 Promise 的 ldapjs https stackoverflow com questions 30682597 use ldapjs with promise 不幸的是 它仍然没有解决 这次我尝试
  • 查找临时表的列名[重复]

    这个问题在这里已经有答案了 我需要找到列名 of 临时表 如果它是物理表那么我们可以使用sys columns or Information schema columns系统视图来查找列名称 同样 有没有办法找到临时表中存在的列名 SELE
  • 寻找一种简单、简约的方式在云端存储小数据包

    我正在寻找一个非常简单且免费的小数据包云存储 基本上 我想编写一个 Greasemonkey 脚本 用户可以在具有共享数据集的多台计算机上运行该脚本 数据主要只是一个数字 每个用户八个字节就足够了 这一切都归结为以下要求 易于开发 这是一个
  • MATLAB 支持嵌套变量作用域吗?

    MATLAB 可以定义像以下类伪 C 代码那样的变量吗 int a 0 int b c int a 42 b a c a 我们可以使用嵌套函数来 模拟 这一点 我们可以不使用函数来做到这一点吗 我问这个问题是因为我想将一些 C 代码转换为
  • 如何在 MPAndroidChart 中从右向左绘制数据?

    我最近更新了MPAndroid图表 https github com PhilJay MPAndroidChart从1 7 4到2 0 9的库 我忘记了我做了什么自定义折线图以使数据从右到左显示 有人知道吗 我想知道是否有一种方法可以调用来
  • 访客模式示例

    public class Song public string Genre get protected set public string Name get protected set public string Band get prot