Розглянемо інтерфейс:
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.
Однак я розміщую це питання, щоб почути інші думки щодо цього, можливо, моменти, про які я не замислювався.
BTW: Я б сказав, що NoteGenerator це концептуально, IWaveGeneratorтому що він породжує SoundWaves.