design-patterns - 我如何知道何时创建界面?

标签 design-patterns oop interface class-design

我正处于开发学习的一个阶段,我觉得我必须了解更多关于接口(interface)的知识。

我经常读到它们,但似乎我无法理解它们。

我读过这样的例子:Animal 基类,带有 IAnimal 接口(interface),用于“Walk”、“Run”、“GetLegs”等 - 但我从未从事过某些工作,感觉就像“嘿,我应该在这里使用接口(interface)!”

我错过了什么?为什么对我来说这是一个很难理解的概念!我只是被这样一个事实吓到了:我可能永远不会意识到对它们的具体需求——主要是由于理解它们的某些方面缺失了!这让我觉得作为一名开发人员我错过了一些最重要的东西!如果有人有过这样的经历并取得了突破,我将不胜感激一些关于如何理解这个概念的提示。谢谢。

最佳答案

它解决了这个具体问题:

你有 a、b、c、d 4 种不同类型。在你的代码中你都有这样的东西:

a.Process();
b.Process();
c.Process();
d.Process();

为什么不让他们实现 IProcessable,然后再执行

List<IProcessable> list;

foreach(IProcessable p in list)
    p.Process();

当您添加 50 种类型的类(例如,所有类都执行相同的操作)时,这会扩展得更好。

<小时/>

另一个具体问题:

您看过 System.Linq.Enumerable 吗?它定义了大量的扩展方法,可对任何实现 IEnumerable 的类型进行操作。因为任何实现 IEnumerable 的内容基本上都表示“我支持无序 foreach 类型模式中的迭代”,因此您可以为任何可枚举类型定义复杂的行为(Count、Max、Where、Select 等)。

关于design-patterns - 我如何知道何时创建界面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/444245/

相关文章:

c# - 使用 LINQ 将多个列表合并为一个列表

design-patterns - Flutter-如何在 Flutter 的整个应用程序生命周期中将数据保存在内存中?

java - 在 Java 中返回排序列表

php - 如何在mysql中使用oop从mysql读取数据?

java - DDD - 为什么我们需要工厂?

iphone - 实现类似于 iPhone 联系人应用程序的 "add photo"按钮

javascript - Backbone.js - 全局/共享/相关模型的最佳方法是什么?

design-patterns - 是否存在设计模式的明确列表?

java - 将接口(interface)嵌套在具体类中的可行设计替代方案是什么?

class - TypeScript 类和同名接口(interface)之间的关系