Factory Method Pattern
base class में factory method परिभाषित करें और subclasses को यह तय करने दें कि कौन-सा product बनाना है।
Factory Method Pattern, CoddyKit पर Java Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Java Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
फ़ैक्टरी मेथड का उद्देश्य
फ़ैक्टरी मेथड किसी वस्तु को बनाने के लिए एक इंटरफ़ेस परिभाषित करता है, लेकिन कौन-सी क्लास का उदाहरण बनाना है, यह निर्णय उपक्लासों पर छोड़ देता है। यह निर्माण-तर्क को क्लाइंट कोड से अलग कर देता है।
फ़ैक्टरी मेथड के बिना समस्या
फ़ैक्टरी के बिना, क्लाइंट कोड new ConcreteClass() कॉल से भर जाता है। नया रूप जोड़ने पर हर कॉल स्थान बदलना पड़ता है — यह खुले/बंद सिद्धांत का उल्लंघन है।
// Client knows too much:
Shape shape;
if (type.equals("circle")) shape = new Circle(r);
else if (type.equals("rect")) shape = new Rectangle(w, h);
// Every new shape requires editing this code.क्रिएटर की अमूर्त क्लास
createProduct() फ़ैक्टरी मेथड वाली एक अमूर्त क्रिएटर क्लास परिभाषित कीजिए। उपक्लास इसे ओवरराइड करके विशिष्ट उत्पाद प्रकार लौटाती हैं।
public abstract class Dialog {
public void render() {
Button btn = createButton(); // factory method
btn.onClick();
}
protected abstract Button createButton();
}ठोस क्रिएटर
प्रत्येक उपक्लास उपयुक्त उत्पाद लौटाने के लिए फ़ैक्टरी मेथड को ओवरराइड करती है, और आधार क्लास के आसपास के एल्गोरिदम को बदले बिना ऐसा करती है।
public class WindowsDialog extends Dialog {
@Override
protected Button createButton() { return new WindowsButton(); }
}
public class WebDialog extends Dialog {
@Override
protected Button createButton() { return new HtmlButton(); }
}उत्पाद इंटरफ़ेस
सभी ठोस उत्पाद एक सामान्य इंटरफ़ेस लागू करते हैं, ताकि क्रिएटर उनके साथ सामान्य रूप से काम कर सके।
public interface Button {
void onClick();
void render();
}
public class WindowsButton implements Button {
public void onClick() { System.out.println("Windows click"); }
public void render() { System.out.println("Render Windows button"); }
}स्टैटिक फ़ैक्टरी मेथड बनाम फ़ैक्टरी मेथड पैटर्न
स्टैटिक फ़ैक्टरी मेथड (जैसे, LocalDate.of()) एक नामकरण परंपरा है, GoF पैटर्न नहीं। GoF पैटर्न इनहेरिटेंस का उपयोग करता है, जबकि स्टैटिक फ़ैक्टरी एक ही क्लास में स्टैटिक मेथड का उपयोग करती हैं।
// Static factory (NOT the GoF pattern)
LocalDate d = LocalDate.of(2024, 6, 15);
// GoF Factory Method uses a class hierarchyपैरामीटरयुक्त फ़ैक्टरी मेथड
प्रत्येक उत्पाद के लिए अलग उपक्लास बनाए बिना, कई उत्पादों में से किसी एक को चुनने के लिए फ़ैक्टरी मेथड में एक पैरामीटर भेजिए।
public class ShapeFactory {
public static Shape create(String type, double... dims) {
return switch (type) {
case "circle" -> new Circle(dims[0]);
case "rectangle" -> new Rectangle(dims[0], dims[1]);
default -> throw new IllegalArgumentException("Unknown: " + type);
};
}
}जेनरिक के साथ फ़ैक्टरी मेथड
फ़ैक्टरी मेथड को प्रकार-सुरक्षित और विभिन्न उत्पाद परिवारों में पुनः उपयोग योग्य बनाने के लिए जेनरिक का उपयोग कीजिए।
public abstract class Repository<T, ID> {
public abstract T findById(ID id);
protected abstract T createEmpty(); // factory method
}मैप के साथ फ़ैक्टरियों का पंजीकरण
रजिस्ट्री-आधारित फ़ैक्टरी, प्रकार वाली स्ट्रिंग्स का एक मैप Supplier लैम्ब्डा से जोड़कर रखती है। इससे if-else शृंखलाओं से बचा जा सकता है और पंजीकरण को गतिशील बनाया जा सकता है।
Map<String, Supplier<Notification>> registry = new HashMap<>();
registry.put("email", EmailNotification::new);
registry.put("sms", SmsNotification::new);
Notification n = registry.getOrDefault(type, DefaultNotification::new).get();फ़ैक्टरी मेथड बनाम एब्स्ट्रैक्ट फ़ैक्टरी
फ़ैक्टरी मेथड इनहेरिटेंस के माध्यम से एक उत्पाद प्रकार बनाता है। एब्स्ट्रैक्ट फ़ैक्टरी संयोजन के माध्यम से संबंधित उत्पादों के परिवार बनाती है। जब केवल एक उत्पाद बदलता हो, तब फ़ैक्टरी मेथड का उपयोग कीजिए; जब पूरा उत्पाद-संग्रह साथ बदलता हो, तब एब्स्ट्रैक्ट फ़ैक्टरी का उपयोग कीजिए।
वास्तविक उदाहरण: लॉगर फ़ैक्टरी
SLF4J का LoggerFactory.getLogger(Class) एक स्टैटिक फ़ैक्टरी है, जो सही लॉगर कार्यान्वयन (Logback, Log4j, JUL) लौटाती है, और कॉल करने वाले को यह जानने की आवश्यकता नहीं होती कि इनमें से कौन-सा उपयोग हो रहा है।
Logger log = LoggerFactory.getLogger(MyService.class);
log.info("Service started");त्वरित जाँच
फ़ैक्टरी मेथड पैटर्न की मुख्य विशेषता क्या है?
पुनरावलोकन
फ़ैक्टरी मेथड उदाहरण बनाने का निर्णय ओवरराइड की जा सकने वाली उपक्लास मेथड में रखकर वस्तु-निर्माण को क्लाइंट से अलग करता है। जब कोई क्लास यह पहले से तय न कर सके कि उसे कौन-सी वस्तुएँ बनानी हैं, तब इसका उपयोग कीजिए।
एआई शिक्षक के साथ Java सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 104
- पाठ
- 374
अक्सर पूछे जाने वाले प्रश्न
क्या “Factory Method Pattern” पाठ निःशुल्क है?
हाँ—“Factory Method Pattern” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Java Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“Factory Method Pattern” में मैं क्या सीखूँगा?
base class में factory method परिभाषित करें और subclasses को यह तय करने दें कि कौन-सा product बनाना है। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Java Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Java Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Java Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।
“Factory Method Pattern” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Java Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Java Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- Singleton: Thread-Safe Implementations
- Factory Method Pattern
- Product Families के लिए Abstract Factory
- Fluent API के साथ Builder Pattern