C# में उन्नत डिज़ाइन पैटर्न: सिद्धांत से कोड तक

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

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

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

C# में उन्नत डिज़ाइन पैटर्न: सिद्धांत से कोड तक

\n\n

डिज़ाइन पैटर्न केवल पाठ्यपुस्तकों की अमूर्त अवधारणाएँ नहीं हैं। एक अनुभवी C# डेवलपर के लिए, वे उपकरण बन जाते हैं जो लचीला, विस्तार योग्य और रखरखाव योग्य एप्लिकेशन आर्किटेक्चर बनाने में सक्षम बनाते हैं। इस लेख में, हम तीन शक्तिशाली पैटर्न पर चर्चा करेंगे जो अक्सर बुनियादी पाठ्यक्रमों से बाहर रह जाते हैं: Visitor, Strategy और Command। आप न केवल C# में उनका कार्यान्वयन देखेंगे, बल्कि यह भी समझेंगे कि वे .NET इकोसिस्टम में वास्तविक समस्याओं को कैसे हल करते हैं।

\n\n

1. Visitor पैटर्न (विज़िटर) — ऑब्जेक्ट पदानुक्रम के साथ कार्य करना

\n\n

Visitor पैटर्न आपको मौजूदा क्लासेस की संरचना को बदले बिना उनमें नए ऑपरेशन जोड़ने की अनुमति देता है। यह विशेष रूप से तब उपयोगी होता है जब आपके पास ऑब्जेक्ट्स का एक जटिल पदानुक्रम हो और आप उनके प्रकार के आधार पर विभिन्न क्रियाएँ करना चाहते हैं।

\n\n

समस्या

\n

कल्पना करें कि आपके पास TextDocument, Spreadsheet और Presentation क्लासेस वाली एक दस्तावेज़ प्रबंधन प्रणाली है। आपको PDF, HTML और XML में निर्यात कार्यक्षमता जोड़ने की आवश्यकता है। Visitor पैटर्न के बिना, आपको प्रत्येक क्लास को संशोधित करना होगा, जो ओपन/क्लोज्ड सिद्धांत (OCP) का उल्लंघन करता है।

\n\n

C# में कार्यान्वयन

\n
// 1. एलिमेंट इंटरफ़ेस\npublic interface IElement\n{\n    void Accept(IVisitor visitor);\n}\n\n// 2. ठोस एलिमेंट\npublic class TextDocument : IElement\n{\n    public string Content { get; set; }\n    public void Accept(IVisitor visitor) => visitor.Visit(this);\n}\n\npublic class Spreadsheet : IElement\n{\n    public List<List<string>> Rows { get; set; }\n    public void Accept(IVisitor visitor) => visitor.Visit(this);\n}\n\n// 3. विज़िटर इंटरफ़ेस\npublic interface IVisitor\n{\n    void Visit(TextDocument doc);\n    void Visit(Spreadsheet sheet);\n}\n\n// 4. ठोस विज़िटर — HTML निर्यात\npublic class HtmlExportVisitor : IVisitor\n{\n    public void Visit(TextDocument doc)\n    {\n        Console.WriteLine($"<h1>{doc.Content}</h1>");\n    }\n\n    public void Visit(Spreadsheet sheet)\n    {\n        Console.WriteLine("<table>");\n        foreach (var row in sheet.Rows)\n        {\n            Console.WriteLine("<tr><td>" + string.Join("</td><td>", row) + "</td></tr>");\n        }\n        Console.WriteLine("</table>");\n    }\n}\n\n// उपयोग\nvar docs = new List<IElement> { new TextDocument { Content = "नमस्ते" }, new Spreadsheet { Rows = new List<List<string>> { new List<string> { "A", "B" } } } };\nvar visitor = new HtmlExportVisitor();\nforeach (var doc in docs) doc.Accept(visitor);
\n\n

लाभ: मौजूदा क्लासेस को छुए बिना नए ऑपरेशन आसानी से जोड़े जा सकते हैं। नुकसान: यदि एलिमेंट पदानुक्रम बार-बार बदलता है, तो Visitor असुविधाजनक हो जाता है।

\n\n

2. Strategy पैटर्न (स्ट्रेटेजी) — एल्गोरिदम का गतिशील परिवर्तन

\n\n

Strategy पैटर्न एल्गोरिदम के एक परिवार को परिभाषित करने, उनमें से प्रत्येक को एनकैप्सुलेट करने और उन्हें विनिमेय बनाने की अनुमति देता है। यह विशाल if-else या switch संरचनाओं से बचने का एक क्लासिक तरीका है।

\n\n

समस्या

\n

आपको शिपिंग लागत गणना प्रणाली लागू करने की आवश्यकता है। शिपिंग के विभिन्न तरीके हैं: कूरियर, डाक, स्वयं पिकअप। प्रत्येक तरीके की मूल्य गणना की अपनी तर्कशक्ति है।

\n\n

C# में कार्यान्वयन

\n
// 1. स्ट्रेटेजी इंटरफ़ेस\npublic interface IShippingStrategy\n{\n    decimal CalculateCost(Order order);\n}\n\n// 2. ठोस स्ट्रेटेजी\npublic class CourierShipping : IShippingStrategy\n{\n    public decimal CalculateCost(Order order) => order.Weight * 5.0m + 100;\n}\n\npublic class PostShipping : IShippingStrategy\n{\n    public decimal CalculateCost(Order order) => order.Weight * 2.0m + 50;\n}\n\npublic class PickupShipping : IShippingStrategy\n{\n    public decimal CalculateCost(Order                

ब्लॉग

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