Pertimbangkan sebuah antarmuka:
interface IWaveGenerator
{
SoundWave GenerateWave(double frequency, double lengthInSeconds);
}
Antarmuka ini diimplementasikan oleh sejumlah kelas yang menghasilkan gelombang dengan bentuk yang berbeda (misalnya, SineWaveGeneratordan SquareWaveGenerator).
Saya ingin menerapkan kelas yang menghasilkan SoundWaveberdasarkan pada data musik, bukan data suara mentah. Itu akan menerima nama catatan dan panjang dalam hal ketukan (bukan detik), dan secara internal menggunakan IWaveGeneratorfungsi untuk membuat yang SoundWavesesuai.
Pertanyaannya adalah, haruskah NoteGeneratormengandung IWaveGeneratoratau mewarisi dari IWaveGeneratorimplementasi?
Saya condong ke arah komposisi karena dua alasan:
1- Ini memungkinkan saya untuk menyuntikkan apapun IWaveGeneratorke NoteGeneratordinamis. Juga, saya hanya perlu satu NoteGeneratorkelas, bukan SineNoteGenerator, SquareNoteGenerator, dll
2- Tidak perlu untuk NoteGeneratormengekspos antarmuka tingkat bawah yang ditentukan oleh IWaveGenerator.
Namun saya memposting pertanyaan ini untuk mendengar pendapat lain tentang ini, mungkin poin yang belum saya pikirkan.
BTW: Saya akan mengatakan NoteGenerator secara konseptual IWaveGeneratorkarena menghasilkan SoundWaves.