Hey guys, Aditya here back again with another video आज के इस वीडियो में हम डिसकस करने वाले हैं factory method pattern को well आपने सुना होगा factory pattern के बारे में मैं actually इस factory pattern को दो पार्ट में divide करने वाला हूँ जो कि मुझे इस book में बताया गया है पहली जो पार्ट रहेगा उसमें मैं आपको बताऊंगा what is factory method pattern और जो दूसरा रहेगा वो रहेगा abstract factory pattern ठीक है तो इस वीडियो में हम डिसकस करेंगे factory method pattern क्या है well आप आप अभी तक कई सारे design pattern देख चुके हैं ठीक है तो आपके दमात में एक question तो आया ही होगा कि हम अभी भी किसी भी class का जो new करते हैं किसी class को instantiate करते हैं जो new करते हैं वो हम छोड़ देते हैं हमारे main method पर क्या ये नहीं लगता कि हम इसको भी किसी तरीके से encapsulate कर लें बहुत ज्यादा क्लियर नहीं हुआ होगा मैं आपको एक्सांपल देने की कोशिश करता हूं जैसे हम किसी दुकान पर या शॉप पर जो फोन लेने जाते हैं मोबाइल फोन तो हम वहाँ पर जाकर बोलते हैं कि मुझे आईफोन चाहिए मुझे वन प्लस चाहिए मुझे रिय आपको internal चीजों के बारे में कुछ नहीं पता होता आपको सिर्फ phone चाहिए होता है आप जाके बोलते हो एक constant क्या आपको iPhone चाहिए और आप उस model number बताते हो आपको iPhone मिल जाता है सिर्फ इसी तरीके से अगर अपने programming में बात करें तो हमें किसी class का object को instantiate करना हो हम नहीं चाहते कि हम उसको new करें और उसके methods को जाके call करें हम चाहते हैं कि सिर्फ एक constant pass करें और उस specific class का मुझे object मिल जाए तो इस तरह की चीजों इसके लिए हम यूज़ करते हैं factory method pattern को देखिए factory का मतलब simple सा यहाँ पर यही है कि यह हम जो भी बनाने वाले हैं अपने object oriented environment में हम यहाँ पर different classes के object को instantiate करेंगे based on a one constant आप constant pass कीजिए और उसी तरह का object आपको मिल जाएगा ठीक है तो सबसे पहले हम इस mobile phone का एक example ले लेते हैं और इसका class diagram बनान की कोशिश करते हैं exactly factory method pattern है तो यहाँ पे मैं सबसे पहले क्या करता हूँ एक interface बना लेता हूँ ठीक है और इस interface यहाँ पे लिख देता हूँ interface ओके और इस interface का मैं नाम दे देता हूँ mobile ठीक है अभी के लिए simple mobile दे देता हूँ और इस interface में हमारा होगा एक method और यह method क्या होगा जिसको सारी classes implement करेंगे तो इसका मैं नाम दे देता हूँ create mobile ठीक है तो अभी मैं क्या करता हूँ अब यह interface है तो इसको implement करने वाली classes होंगी जिसको concrete classes बोलते हैं तो मैं यहाँ पे 3 classes बना लेता हूँ पहले इस तरीके से यह मैं तीन classes बना ली, इन तीन classes का नाम क्या होगा, वो देख लेते हैं, say हमारी जो companies हैं, उन्हीं का real word example ले लेते हैं, see यहाँ पे यह बनाता है iPhone, और एक company हो गई one plus जो बनाती है phone को और तीसरी हो गई से realme ये भी phone बनाती है तो ये क्या करेंगे अब ये जो हमारा interface है इसको ये लोग क्या करेंगे इसको कर लेंगे implement अब जैसे implement करेंगे तो क्या होगा हमारा जो create mobile जो method है वो इसको अपने तरीके से implement करेंगे ठीक है तो यहां पर यह सारी चीज़ें हो जाएंगे तीनों classes यह जो concrete classes हैं वो create mobile को implement करेंगे और इसके method है उनको implement करेंगे अपने-अपने accordingly ठीक है यह तो हो गया एक interface लेकिन यहाँ पर factory कहा है well factory के लिए हम थोड़ा सा और यहाँ पर करते चलते हैं और इस factory के लिए हम एक class बना लेते हैं पहले और यह जो class होगी इसको हम बोल देते हैं say mobile factory, इसका हम नाम दे देते हैं, mobile factory, अब इस mobile factory में क्या होगा, वो मैं आपको बता देता हूँ, यह जो mobile factory होगी, वो basically इस interface को ही use करेगी, और यहाँ पर एक method होगा, इसका नाम दे देता हूँ, say produce mobile, ठीक है, यह produce mobile इसके अंदर क्या होगा, एक method होगा, जो इस interface को use करके, इस वाले interface को use करके, जो भी इसकी concrete classes होगी, उसका object हम customer को return कर देगे, ठीक है, तो यह कैसे होगा, यहाँ पर एक main method होगा, अपना, जो main class होगी, ठीक है, वो क्या करेगी, इस mobile factory के method को produce mobile को call करेगी, यह क और उसका method कौन सा है produceMobile उसको वो call करेगी और इसके call करने से हमें क्या होगा इस method में हम जो भी अपना time pass करेंगे हम बोलेंगे कि हमें iPhone चाहिए तो वो iPhone का object मुझे return कर देगी हम बोलेंगे मुझे OnePlus चाहिए तो OnePlus का object return कर देगी हम बोलेंगे Realme चाहिए तो मैं Realme का object return कर देगी so basically हम simply ये नहीं बोलेंगे कि मुझे iPhone का object new करना है मैं उसे एक string constant pass करूँगा और उस constant के according इस method के अंदर वो mapping होगी कि जिससे वो इस specific company के object को मुझे return करके दे देगा अब ये तो हो गया इस factory method pattern का class diagram हम इसको तोड़ा सा जो real example मैंने बनाया है उस class diagram को एक बार देख लेते हैं यहाँ पर एक interface है which is called mobile इस जगह पर यहाँ एक इंटरफेस ओके जो मैंने बनाया था पहले उसको तीन क्लासेस इंप्लीमेंट कर रही है एक है रियल मी एक है आईफोन और एक है वन प्लस फोन तो यह तीन क्लासेस हैं जो इसका एक मेथड है क्रिएट मोबाइल करके वो अलग-अलग तरीके से मोबाइल को अपन तो आप इस चीज को देख सकते हो कि यहाँ पर simple मैंने कुछ नहीं किया है, interface बनाया है, उसको classes implement कर रहे हैं अपने तरीके से ठीक है, यहाँ पर मैंने एक factory बनाई हुआ है, which is called mobile factory, जैसे मैंने अभी बनाया था mobile factory यह mobile factory इस यह जो interface है, mobile उसको use करेगी और यहाँ पर create mobile करके एक method और बना दिया है मैंने, which is the same name here, पर यह actually यह decide करेगा कि आपने किस type का यहाँ पर string पास के, string is basically यहाँ पर जो एक constant है जिसको मैंने pass किया हुआ है इसमें हम लोग pass करेंगे आपको realme चाहिए, आपको iPhone चाहिए, आपको OnePlus चाहिए उसके according इसमें pass किया जाएगा और उस object को main class में वापस से return कर देंगे ठीक है तो यह हो गया factory method pattern का class diagram यहाँ पर मैंने क्या किया हुआ है एक interface बनाया हुआ है mobile ठीक है exactly same example को ही मैंने implement किया है और यहाँ पर एक method उसके अंदर है, which is createMobile, जिसको हमारी जो भी class, इस interface को implement करेंगी, वो सभी इस method को क्या करने वाली है, अपने तरीके से implement करने वाली है, तो यहाँ पर तीन classes हैं, मैंने उसी, तरीके से इसको रखा हुआ है code snippet को तो यहाँ पे आप देखें सबसे पहले यहाँ पे जो class है iPhone इस iPhone को देख लेते हैं आप देखेंगे यह जो iPhone class है उसने implement किया हुआ है mobile को mobile क्या है यही है यह उपर वाला हमारा जो interface है उसको तो आप क्या इस तरीके से अगर मैं class diagram के form में बोलूँ तो आप इस तरीके से map कर सकते हो इसको ठीक है अब इसमें क्या किया गया है यहाँ पे create mobile को override किया गया है आप देखें create mobile override किया जा रहा है यहाँ पे simply प्रिंट कर दिया system.out.println ठीक है क्योंकि ये iPhone है तो मैंने इसमें simple सा message प्रिंट कर दिया है creating iPhone mobile phone इसी तरीके से हम दूसरी class में चलते है say one plus implements mobile यहाँ पे देखिये one plus implements mobile ठीक है ये भी override कर रहा है कि इसको create mobile को और यहाँ पे मैंने जो string थी वो थोड़ी सी बदल दिया है which is creating one plus mobile phone ठीक है तो इसको भी हम किस तरीके से map कर सकते है class diagram के form में इस तरीके क्योंकि implement कर रहा है अब यहाँ पर जो तीसरी हमारी जो class है concrete class which is realme company है जो implement करती है mobile को ठीक है और यहाँ पर भी override किया गया है same way में और यह create mobile method है इसमें हमने simple सा pass किया है creating realme mobile phone और अगर मैं यहाँ पर भी इसको map करूँ तो same way में यह इसको implement कर रही है ठीक है तो अगर आप इसको broad picture में दीखोगे तो basically यह तीनों classes इस interface को, which is mobile को implement कर रही है, अब देख लेते हैं, हमारी जो factory, हमारी जो factory है, वो कैसी है, mobile factory, अब एक mobile factory class बनाई हुए है, देखें, इस mobile factory class में मैंने क्या किया हुआ है, यहाँ पर एक method बनाया है, जो mobile के object को return करते है, mobile क्या है, हमारा interface, ठीक है, और क्योंकि उसकी concrete classes, होगी जो उसको implement कर रही है उसका object इसमें मिल जाएगा तो यहाँ पे create mobile एक method बनाया है और important part यहाँ पे मैं company का name पास करा रहा हूँ this is very important यहाँ पे समझने वाली बात यही है कि मैं user से बोल रहा हूँ कि आप मुझे as in constant के form में बता दिजिए कि आपको iPhone phone चाहिए आपको Android, sorry, आपको Realme चाहिए या फिर आपको OnePlus चाहिए तो आप जो भी company का name पास करोगे उसके according मैं आपको उसका object बना के दे दूँगा आपको बनानी की ज़रूरत नहीं ठीक है, तो यह company name इसके अंदर, इस method के अंदर user पास करता है और हम देखते हैं अगर company name null है या company name empty है तो हम return null कर देते हैं मतलब आपने पास ही नहीं किया तो हम return null कर देते हैं यहाँ पर देखें, L-SIP में मैंने लगाया है अगर वो iPhone है, equals to company name, ठीक है तो हम क्या करते हैं, iPhone का object को return कर देते है, new iPhone और return क्या हो जाता है, mobile का object यहाँ पे OnePlus की जब बात आती है, अगर वो OnePlus पास किया हुआ है, यहाँ पे equal के लिए लगाते हैं और इसको पास कर देते हैं, OnePlus पॉर्ण इसी तरीके से realme के लिए लगाया हुआ है, equals, अगर realme का आता है, तो हम इसको पास कर देते हैं अगर कोई वो ऐसा object, ऐसा constant पास कर देता है, जो हमारे इसमें है ही नहीं तो हम इसको return कर देते हैं, कह देते हैं, हम इस तरह का कोई भी object आपको बने जाते हैं बनाकर नहीं दे सकते कंपनी का तो यहां से हमें यह उस स्पेसिफिक का जो भी हमीं कंपनी चाहिए उसका ऑब्जेक्ट मिल जाता है तो अगर आप इस चीज को थोड़ा सा समझेंगे तो आपको समझ में आएगा यहां पर हमने सिर्फ जो हमारा हम classes को instantiate करते थे, वो काम भी हमने अब user से बाहर ले लिया है, और हम user से बोलते हैं, आप सिर्फ एक constant पास कीजिए, हम उसके according आपको generate करके उस class का object दे देंगे, ठीक है? तो यहाँ पे भी इस method में हमने यही किया है कि simply हम user से चाहते हैं कि कम से कम वो चीजों से interact करें देखें, हमेशा जब भी आप design pattern पे काम करते हैं तो आपकी design इस तरीके से होनी चाहिए closed for modification ready for extension आपकी जो design है modification के लिए बंद रहनी चाहिए लेकिन extension के लिए हमेशा तैयार रहनी चाहिए तो यहाँ पर हमने उसी चीज को implement कर दिया अब यहाँ पर देखिए एक और part इसका main method और देख लेते है अब देखिए यहाँ पर मैंने क्या किया mobile factory new mobile factory अब आप मेंसे कई लोग directly मुझे पता है यह चीज बोलेंगे कि यहाँ पर mobile factory का तो object मैंने new किया है well बुल्कुल सही है लेकिन यह कोई जरूरी नहीं है आप क्या कर सकते हो इसको steady static बना सकते हो, means आप यह जो इसके अंदर जो method है, यह वाला, इसको आप यहाँ पर लिख सकते हो static, तो आपको new करने के ज़रूरत नहीं पड़ेगी, आप सीधा mobile factory.create mobile भी कर सकोगे, ठीक है, लेकिन मैंने अभी इसको static नहीं बनाया है, पर आप static बना सकते हो अगर आप चाहते हो तो, कि आप यह भी new ना करें तो, ठीक है, तो मैंने क्या किया, mobile factory का object बनाया, उस mobile factory का object में मैंने किया create mobile, और यहाँ पर iPhone को pass कर दिया, जब मैंने iPhone, आपको पास किया तो मेरे मोबाइल का ऑब्जेक्ट मिल गया और मैंने कॉल किया क्रिएट मोबाइल ठीक है और मुझे मोबाइल मिल जाएगा सीमवे में मैंने वन प्लस पास किया और क्रिएट मोबाइल को कॉल किया रियल में को पास किया और क्रिएट हैगा जिस सबसे पहले मैंने क्या किया हुआ है आईफोन को पास किया हुआ है यहां पर आप देखिए यह आईफोन है तो आपको यहां पर मिल जाएगा आईफोन मोबाइल फोन ठीक है क्रिएटिंग आईफोन पर मैंने वन वन प्लस का object को call किया था, फिर आया वन प्लस mobile phone, इसी तरीके से creating real mobile phone, तो मैंने यहाँ पर जो तीन pass किये थे, और जो create mobile को call करता हूँ उस method को, तो उस specific concrete class का object call होता है, और उस method के अन्य जो भी हमने code लिखा होता है, वो execute हो जाता है, well, I think अब आपको समझ में आ गया होगा कि factory method pattern क्या है, अगर आपको कोई confusion है, मुझे comment से मताइए, उसका answer करूँगा well अभी next tutorial में हम इसका जो second part है factory pattern का which is abstract factory pattern हम उसको समझेंगे वो इससे थोड़ा सा और complex है और वो क्यों जरूरी है इसके बाद हमें उसको भी उस next video में बताऊंगा so guys thank you for watching I'll catch you in the next design pattern bye