www.dofactory.com पर मुझे फैक्टरी पैटर्न का असली दुनिया उदाहरण मिला। लेकिन कोड पुनर्विक्रेता में वर्चुअल सदस्य कॉल के बारे में ReSharper में एक चेतावनी उत्पन्न करता है।फैक्टरी विधि पैटर्न को कैसे रोकें कन्स्ट्रक्टर में वर्चुअल सदस्य कॉल के बारे में चेतावनी उत्पन्न करना?
कोड चेतावनी के कारण निम्नलिखित है:
abstract class Document
{
private List<Page> _pages = new List<Page>();
// Constructor calls abstract Factory method
public Document()
{
this.CreatePages(); // <= this line is causing the warning
}
public List<Page> Pages
{
get { return _pages; }
}
// Factory Method
public abstract void CreatePages();
}
class Resume : Document
{
// Factory Method implementation
public override void CreatePages()
{
Pages.Add(new SkillsPage());
Pages.Add(new EducationPage());
Pages.Add(new ExperiencePage());
}
}
लेने वाली कोड में, आप कर सकते हैं तो बस का उपयोग करें:
Document document = new Resume();
मुझे समझ नहीं क्यों यह एक बुरा विचार एक आभासी कॉल करने के लिए है निर्माता में सदस्य (जैसा कि here समझाया गया है)।
मेरा सवाल यह है कि आप अभी भी फैक्ट्री पैटर्न का उपयोग करने के लिए इसे पुन: सक्रिय कर सकते हैं, लेकिन कन्स्ट्रक्टर में वर्चुअल सदस्य कॉल के बिना।
मैं सिर्फ निर्माता से CreatePages
का कॉल निकालना चाहते हैं, तो उपभोक्ता को स्पष्ट रूप से कॉल करने के लिए होता है CreatePages
विधि:
Document document = new Resume();
document.CreatePages();
मैं भी बहुत कुछ स्थिति है जहाँ एक नया Resume
बनाने पसंद करते हैं कि सभी है वास्तव में पृष्ठों को फिर से शुरू करने के लिए आवश्यक है।
बस 'फिर से शुरू करें' को 'मुहरबंद' के रूप में चिह्नित करें? – EkoostikMartin
@EkoostikMartin क्या होगा यदि ओपी कल उठ जाएगा 'स्टाइलिश रेज़्यूम: फिर से शुरू करें' घोषित करना चाहते हैं? –
@EkoostikMartin: मैं सिर्फ चेतावनी को दूर नहीं जाना चाहता, मैं जानना चाहता हूं कि यह और कैसे लागू किया जा सकता है। फिर भी 'रेज़्यूमे' को उपclass करना संभव बनाता है। – comecme