考虑一个接口:
interface IWaveGenerator
{
SoundWave GenerateWave(double frequency, double lengthInSeconds);
}
此接口由许多类实现,这些类生成不同形状的波(例如SineWaveGenerator
和SquareWaveGenerator
)。
我想实现一个SoundWave
基于音乐数据而不是原始声音数据生成类的类。它会收到音符的名称和以拍子(不是秒)为单位的长度,并在内部使用该IWaveGenerator
功能来创建一个音符SoundWave
。
问题是,应该NoteGenerator
包含IWaveGenerator
还是应该从IWaveGenerator
实现中继承?
由于两个原因,我倾向于合成:
1 -它让我注入任何IWaveGenerator
的NoteGenerator
动态。另外,我只需要一个NoteGenerator
类,而不是SineNoteGenerator
,SquareNoteGenerator
等等。
2-无需NoteGenerator
公开由定义的较低级接口IWaveGenerator
。
但是,我发布此问题是为了听取对此的其他意见,也许是我没有想到的要点。
顺便说一句:我会说NoteGenerator
从概念上讲是an,IWaveGenerator
因为它生成SoundWave
s。