जावा में डिज़ाइन पैटर्न: उदाहरणों के साथ उन्नत स्तर

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

जावा में उन्नत डिज़ाइन पैटर्न: Bridge से Visitor तक

\n\n

डिज़ाइन पैटर्न सॉफ़्टवेयर आर्किटेक्चर की सामान्य समस्याओं के सिद्ध समाधान हैं। यदि बुनियादी पैटर्न (Singleton, Factory, Observer) हर Java-डेवलपर को ज्ञात हैं, तो उन्नत पैटर्न अक्सर पर्दे के पीछे रह जाते हैं। इस लेख में हम तीन शक्तिशाली पैटर्न पर चर्चा करेंगे: Bridge, Visitor और Memento। आप जानेंगे कि उन्हें कब लागू करना है, और Java में तैयार कोड उदाहरण प्राप्त करेंगे।

\n\n

1. Bridge (मोस्ट) — अमूर्तता को कार्यान्वयन से अलग करना

\n\n

Bridge पैटर्न का उपयोग तब किया जाता है जब अमूर्तता और उसके कार्यान्वयन को अलग करने की आवश्यकता होती है, ताकि वे स्वतंत्र रूप से बदल सकें। यह विशेष रूप से तब उपयोगी होता है जब आपके पास परिवर्तन के कई आयाम हों (जैसे, विभिन्न प्रकार के उपकरण और विभिन्न प्रकार के रिमोट कंट्रोल)।

\n\n

कब लागू करें: जब आप विभिन्न विकल्पों के संयोजन के कारण 'क्लास विस्फोट' से बचना चाहते हैं।

\n\n

उदाहरण: उपकरणों का नियंत्रण

\n\n

कल्पना करें कि हमारे पास रिमोट (Remote) और उपकरण (Device) हैं। हम चाहते हैं कि एक रिमोट विभिन्न उपकरणों (TV, Radio) के साथ काम कर सके।

\n\n
// कार्यान्वयन (Device)\ninterface Device {\n    void turnOn();\n    void turnOff();\n    void setVolume(int percent);\n}\n\nclass TV implements Device {\n    @Override\n    public void turnOn() { System.out.println("TV चालू"); }\n    @Override\n    public void turnOff() { System.out.println("TV बंद"); }\n    @Override\n    public void setVolume(int percent) { System.out.println("TV वॉल्यूम: " + percent + "%"); }\n}\n\nclass Radio implements Device {\n    @Override\n    public void turnOn() { System.out.println("Radio चालू"); }\n    @Override\n    public void turnOff() { System.out.println("Radio बंद"); }\n    @Override\n    public void setVolume(int percent) { System.out.println("Radio वॉल्यूम: " + percent + "%"); }\n}\n\n// अमूर्तता (Remote)\nabstract class Remote {\n    protected Device device;\n\n    public Remote(Device device) {\n        this.device = device;\n    }\n\n    public abstract void togglePower();\n    public abstract void volumeUp();\n    public abstract void volumeDown();\n}\n\nclass BasicRemote extends Remote {\n    private boolean isOn = false;\n    private int volume = 10;\n\n    public BasicRemote(Device device) {\n        super(device);\n    }\n\n    @Override\n    public void togglePower() {\n        if (isOn) { device.turnOff(); isOn = false; }\n        else { device.turnOn(); isOn = true; }\n    }\n\n    @Override\n    public void volumeUp() {\n        volume += 5;\n        device.setVolume(volume);\n    }\n\n    @Override\n    public void volumeDown() {\n        volume -= 5;\n        device.setVolume(volume);\n    }\n}\n\n// उपयोग\npublic class BridgeDemo {\n    public static void main(String[] args) {\n        Device tv = new TV();\n        Remote remote = new BasicRemote(tv);\n        remote.togglePower(); // TV चालू\n        remote.volumeUp();    // TV वॉल्यूम: 15%\n\n        Device radio = new Radio();\n        remote = new BasicRemote(radio);\n        remote.togglePower(); // Radio चालू\n        remote.volumeUp();    // Radio वॉल्यूम: 15%\n    }\n}
\n\n

लाभ: हम मौजूदा कोड को बदले बिना नए प्रकार के उपकरण या नए रिमोट जोड़ सकते हैं। Bridge पैटर्न क्रॉस-प्लेटफ़ॉर्म अनुप्रयोगों (जैसे, विभिन्न OS पर UI) के लिए आदर्श है।

\n\n

2. Visitor (आगंतुक) — क्लास बदले बिना नए ऑपरेशन

\n\n

Visitor पैटर्न आपको ऑब्जेक्ट्स के एक समूह में नए ऑपरेशन जोड़ने की अनुमति देता है, बिना उन ऑब्जेक्ट्स के क्लास को बदले। यह Java में सिंगल डिस्पैच की सीमाओं को दूर करने का एक क्लासिक तरीका है।

\n\n

कब लागू करें: जब आपके पास एक स्थिर क्लास पदानुक्रम हो, लेकिन आप अक्सर नए ऑपरेशन जोड़ते हैं (जैसे, विभिन्न प्रारूपों में निर्यात, रिपोर्ट जनरेशन)।

\n\n

उदाहरण: आकृतियों को विभिन्न प्रारूपों में निर्यात करना

\n\n

हमारे पास आकृतियाँ हैं

ब्लॉग

पुस्तक अनुशंसाएँ