インターフェイスを考えてみましょう:
interface IWaveGenerator
{
SoundWave GenerateWave(double frequency, double lengthInSeconds);
}
このインターフェイスは、さまざまな形状の波を生成するいくつかのクラス(SineWaveGenerator
およびなどSquareWaveGenerator
)によって実装されます。
SoundWave
生のサウンドデータではなく、音楽データに基づいてを生成するクラスを実装したいと思います。それは音の名前と拍数(秒ではない)の長さを受け取り、内部的にIWaveGenerator
機能を使用してSoundWave
それを作成します。
質問は、「をNoteGenerator
含むIWaveGenerator
べきIWaveGenerator
ですか、それとも実装から継承すべきですか?」
次の2つの理由から、作曲に傾倒しています。
1- 動的に任意のIWaveGenerator
ものを注入できNoteGenerator
ます。またNoteGenerator
、、などSineNoteGenerator
でSquareNoteGenerator
はなく、1つのクラスのみが必要です。
2-でNoteGenerator
定義された下位レベルのインターフェースを公開する必要はありませんIWaveGenerator
。
しかし、私はこれに関する他の意見を聞くためにこの質問を投稿しています。おそらく考えていない点です。
ところで:私はそれがsを生成するため、概念的に言うNoteGenerator
と思います。IWaveGenerator
SoundWave