我一直难以理解如何抽象接口以包含它们的整体效果,但仍然处理细节:
例如,
interface iAudio
{
iInput input;
}
其中 iInput 可以是来自各种事物(声卡、文件等)的输入。
iAudio 不关心它的输入来自哪里,只要它可以获取数据。所以 iInput 抽象了输入。到目前为止我很好。我可以有不同的东西来实现 iInput 插入,但似乎很难弄清楚在这之后要做什么。
我显然可以编写代码来做类似的事情,if (input is InputFile) ...
但这似乎适得其反。(但这是对我有意义的方式)
我知道但对我来说似乎很难的另一种方法是尝试让 iInput 有适当的方法来获取数据,例如,
interface iInput
{
byte[] GetData();
}
然后让不同的类实现这个,例如 InputFile 或 InputSoundcard。虽然它看起来太抽象了,并且没有提供很多做任何事情的能力。(也许我可以获取数据,但使用 InputFile 我需要指定文件名,而 InputSoundcard 将是其他设备特定信息。那么,我最终仍将使用第一种情况。
也许这基本上是正确的方法?感觉不对。希望我的例子足够清楚来证明这个问题。