मेरे पास एक मुख्यविंडो एप्लिकेशन है जिसे मैं सी ++ और क्यूटी (सी ++ और क्यूटी 4.8) सीखने के लिए काम कर रहा हूं। मैं अपने आवेदन की विभिन्न वस्तुओं, जैसे डायलॉग/विज़ार्ड और मेनविंडो में HTTP अनुरोध करना चाहता हूं। मुझे पता है कि मूल रूप से मुझे प्रति आवेदन एक QNetworkAccessManager होना चाहिए। मेरा सवाल यह है कि कक्षाओं के बीच इस क्यूएनएएम को पास करने का सही तरीका क्या है?विभिन्न कक्षाओं में QNetworkAccessManager का उपयोग कैसे करें? कक्षाओं के बीच महत्वपूर्ण डेटा का सामान्य साझाकरण?
फिलहाल मेरे पास यह एक सूचक के रूप में है जो मैं अपने जादूगर के निर्माता को पास करता हूं लेकिन ऐसा लगता है ... सुरुचिपूर्ण और लचीला। मेरे संवाद या जो भी अन्य कक्षाएं मैं तय करने का निर्णय लेता हूं, मेरे एक QNetworkAccessManager तक पहुंचने का उचित तरीका क्या है? मुझे लगता है कि मेरे पास डेटा के किसी भी हिस्से के बारे में एक ही सवाल है जो मुझे सबकुछ तक पहुंचने की ज़रूरत है।
ठीक से सी ++ - डिज़ाइन किया गया समाधान क्या है? सिंगलटन पैटर्न एक विकल्प की तरह लगता है, लेकिन एक बुरा है जैसा कि मैं समझता हूं। मेरे प्रश्न को दिखाने के लिए मेरे यहां कुछ कोड है।
मेरे MainWindow निर्माता और स्लॉट जो मेरे जादूगर का शुभारंभ:
MyMainWindow::MyMainWindow
{
qnam = new QNetworkAccessManager();
}
...
MyMainWindow::wizardStarter
{
mywizard = MyWizard(vari, qnam, this);
}
एक QNetworkAccessManager जिसमें मेरे जादूगर निर्माता मैं नेटवर्क अनुरोध कर रहा हूँ और उपयोगकर्ता से डेटा प्राप्त करने के बाद डेटा पार्स करने, और इसलिए जिसमें मैं की जरूरत है :
MyWizard::MyWizard(SomeOtherArgument *vari, QNetworkAccessManager *qnam, QObject *parent)
{
...
this->ourQnam = qnam;
...
}
MyWizard::launchRequest(QUrl newUrl)
{
ourQnam->get(QNetworkRequest(newUrl));
}
मैं सिंगलटन डिजाइन पैटर्न सलाह देते हैं। आपको लगता है कि यह पैटर्न खराब क्यों है? – hamed
@hamed, सिंगलेट्स कक्षाओं के बीच निर्भरता संबंध छुपाते हैं यदि आप उचित निर्भरता इंजेक्शन का उपयोग नहीं करते हैं। सिंगलटन डिज़ाइन पैटर्न के साथ कुछ भी गलत नहीं है, यह संवाद करने के लिए उचित इंजेक्शन का उपयोग करें कि आपकी कक्षा आपके सिंगलटन पर निर्भर करती है। – Matthew
सिंगलटन के मामले में कोई उचित इंजेक्शन कैसे जोड़ सकता है? – MJBoa