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