2010-03-05 14 views
18

के वास्तविक विश्व उदाहरण मैंने अभी फैक्टरी विधि पढ़ी है। मैं समझता हूं कि यह उप-वर्गों को तत्कालता का प्रतिनिधित्व करने का एक तरीका प्रदान करता है। लेकिन मैं वास्तविक दुनिया परिदृश्य में संभावित उपयोगों को समझ नहीं पाया।फैक्टरी विधि पैटर्न

किसी को भी एक ठेठ दिखा कैसे फैक्टरी विधि पैटर्न ताकि मैं मैं क्या पढ़ा है से संबंधित कर सकते हैं इस्तेमाल किया जा सकता उदाहरण दे सकते हैं।

एक समस्या बयान जो कारखाने विधि पैटर्न के लिए सबसे अच्छा समाधान यह स्पष्ट करने के लिए पर्याप्त होगा।

उत्तर

41

एक वर्ग कार्यान्वयन फैक्ट्री डिजाइन पैटर्न कई वर्गों के बीच पुल के रूप में काम करता है। SQL सर्वर और ओरेकल जैसे एकाधिक डेटाबेस सर्वरों का उपयोग करने के उदाहरण पर विचार करें। यदि आप बैकएंड के रूप में SQL सर्वर डेटाबेस का उपयोग कर एक अनुप्रयोग विकसित कर रहे हैं, लेकिन भविष्य में बैकएंड डेटाबेस को ऑरैकल में बदलने की आवश्यकता है, तो आपको फ़ैक्टरी डिज़ाइन पैटर्न के बाद अपना कोड नहीं लिखा है, तो आपको अपने सभी कोड को संशोधित करने की आवश्यकता होगी।

फैक्टरी डिजाइन पैटर्न में आपको इसे प्राप्त करने के लिए बहुत कम काम करने की आवश्यकता है। कारखाने के डिजाइन पैटर्न को लागू करने वाली एक कक्षा आपके लिए ख्याल रखती है और आपके बोझ को कम करती है। डेटाबेस सर्वर से स्विचिंग आपको बिल्कुल परेशान नहीं करेगा। आपको बस अपनी कॉन्फ़िगरेशन फ़ाइल में कुछ छोटे बदलाव करने की आवश्यकता है।

+1

एक उचित उदाहरण के लिए +1। इस के लिए नमूना कोड http://davidhayden.com/blog/dave/archive/2005/04/02/923.aspx – blitzkriegz

+1

@Mahatma में पाया जा सकता: उस लिंक :) – Sarfraz

+0

@Sarfraz आदर्श उदाहरण, के लिए धन्यवाद मुझे दृष्टिगोचर बनाने में सहायता वास्तविक दुनिया का उदाहरण। इसके लिए +1। नमूना कोड के ऊपर – tugberk

2

एपीआई से मैं अभी विकासशील हूँ:

WebGalleryFactory factory = WebGalleryFactory.newInstance (WebGalleryType.PICASA); 
WebAlbum album = factory.createAlbum (title, description); 

इस उदाहरण मैं सार फैक्टरी बनाने के लिए फैक्टरी विधि एक निश्चित प्रकार (उदाहरण के में PICASA) के उपयोग में।

इन दो पैटर्न अक्सर एक साथ उपयोग किया जाता है।

+3

क्यों PicasaWebGalleryFactory को तुरंत चालू नहीं किया जा रहा है? – Rekin

+1

यह एक कारखाना क्यों है? क्या आपके पास WebGallery क्लास और PicasaWebGallery उपclass नहीं हो सका? – paul

3

Zend_Db इसे Zend_Db_Adapter कक्षा में उपयोग करता है ताकि कॉन्फ़िगरेशन ऑब्जेक्ट से गुज़रने वाली डेटाबेस सेटिंग्स के आधार पर विभिन्न प्रकार की डेटाबेस ऑब्जेक्ट्स के निर्माण की अनुमति मिल सके। नेट बेस कक्षा लाइब्रेरी (बीसीएल) से

+0

कारखाने के तरीकों के अन्य उदाहरण: Zend_Cache :: फैक्ट्री(), Zend_Memory :: फैक्ट्री()।Zend_Log_Writer में Zend_Log_Writer_Abstract के कंक्रीट एडेप्टर प्रारंभ करने के लिए फैक्ट्री विधियां भी हैं। हालांकि एक बात ध्यान में रखी जानी चाहिए: उन कार्यान्वयन आम तौर पर तब होते हैं जब फैक्ट्री विधि को सीधे उत्पाद में इंजेक्शन दिया जाता है (उसमें कोई अलग सार निर्माता/कंक्रीट निर्माता वर्ग नहीं है)। –

+0

बस कोड को दोबारा जांचें: जेडएफ वास्तव में सरल फैक्ट्री कहलाता है, जो मुहावरे है और पैटर्न नहीं है (एचएफ डिजाइन पैटर्न में वर्णित है)। मैंने स्थैतिक फैक्ट्री विधियों का भी गुच्छा देखा, कम से कम कार्यान्वयन प्रभावी जावा में ब्लोच की चर्चा के समान ही था। और मैं फैक्टरी विधि पैटर्न के सटीक गोफ के कार्यान्वयन का पता नहीं लगा सका। –

2

एक उदाहरण Control.CreateControlsInstance है, है जो (विंडोज़ फ़ॉर्म के लिए) नियंत्रण वर्ग के कई अन्य सदस्यों द्वारा किया जाता है।

आप नियंत्रण के अपने खुद के संग्रह, उदा प्रदान करने के लिए इस संरक्षित विधि ओवरराइड कर सकते हैं जब आप एक कस्टम नियंत्रण लागू कर रहे हैं।

4

एक उदाहरण php कोड:

interface DbTable 
{ 
    public function create($array); 
} 

class MySqlTable implements DbTable 
{ 
    public function create($array) 
    { 
     // add a record to a table on mysql database 
    } 
} 

class OracleTable implements DbTable 
{ 
    public function create($array) 
    { 
     // add a record to a table on oracle database 
    } 
} 

class TableFactory 
{ 
    private $dbTypeConfig = 'mysql'; 

    public function createTable() 
    { 
     if ($this->dbTypeConfig == 'mysql') { 
      return new MySqlTable(); 
     } elseif ($this->dbTypeConfig == 'oracle') { 
      return new OracleTable(); 
     } 
     return null; 
    } 
} 
0

सरल फैक्टरी डिजाइन पैटर्न चार गैंग्स से संबंधित नहीं है। एक सरल फैक्टरी पैटर्न उसमें से एक है जो इसे प्रदान किए गए आंकड़ों के आधार पर कई संभावित वर्गों में से एक का उदाहरण देता है। इसका तात्पर्य यह है कि जिन कक्षाओं में यह लौटाता है वे समान माता-पिता वर्ग और विधियों के होते हैं, लेकिन उनमें से प्रत्येक अलग-अलग प्रकार के डेटा के लिए अलग-अलग कार्य करता है। Here is the complete post with real world example

संबंधित मुद्दे