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