Bir arayüz düşünün:
interface IWaveGenerator
{
SoundWave GenerateWave(double frequency, double lengthInSeconds);
}
Bu arayüz, farklı şekillerdeki dalgaları (örneğin SineWaveGenerator
ve SquareWaveGenerator
) üreten birkaç sınıf tarafından uygulanır .
SoundWave
Ham ses verilerine değil, müzik verilerine dayanan bir sınıf uygulamak istiyorum . Bir notun adını ve vuruş sayısı (saniye değil) cinsinden bir uzunluğunu alır ve buna göre IWaveGenerator
oluşturmak için dahili olarak işlevselliği kullanır SoundWave
.
Soru şudur, NoteGenerator
içerme IWaveGenerator
bir IWaveGenerator
uygulamadan mı yoksa bir uygulamadan miras almalı mı?
İki nedenden dolayı kompozisyona yöneliyorum:
1- Bu beni herhangi enjekte sağlar IWaveGenerator
üzere NoteGenerator
dinamik. Ayrıca, sadece bir ihtiyaç NoteGenerator
yerine sınıfını, SineNoteGenerator
, SquareNoteGenerator
vb
2- NoteGenerator
tarafından tanımlanan alt seviye arayüzü ortaya çıkarmaya gerek yoktur IWaveGenerator
.
Ancak bu soruyu, belki de hiç düşünmediğim diğer fikirleri duymak için gönderiyorum.
BTW: söyleyebilirim NoteGenerator
olan bir kavramsal IWaveGenerator
oluşturduğu çünkü SoundWave
s.