एक इंटरफ़ेस पर विचार करें:
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
क्योंकि यह SoundWave
एस उत्पन्न करता है ।