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

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

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

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

PHP में डिज़ाइन पैटर्न: उन्नत स्तर

\n\n

डिज़ाइन पैटर्न (design patterns) सॉफ्टवेयर विकास के दौरान उत्पन्न होने वाली सामान्य समस्याओं के सिद्ध समाधान हैं। प्रारंभिक स्तर पर डेवलपर्स Singleton, Factory या Adapter सीखते हैं। हालांकि, PHP में जटिल, उच्च-लोड या लचीली प्रणालियों में अधिक शक्तिशाली और अमूर्त टेम्पलेट्स की आवश्यकता होती है। इस लेख में, हम PHP पर वास्तविक कोड उदाहरणों के साथ चार उन्नत पैटर्न पर चर्चा करेंगे: स्ट्रैटेजी, फैक्ट्री मेथड, ऑब्ज़र्वर और स्टेट।

\n\n

1. स्ट्रैटेजी पैटर्न (Strategy)

\n\n

उद्देश्य: एल्गोरिदम के एक परिवार को परिभाषित करता है, उनमें से प्रत्येक को एनकैप्सुलेट करता है और उन्हें विनिमेय बनाता है। यह कोड को बदले बिना रनटाइम के दौरान ऑब्जेक्ट के व्यवहार को बदलने की अनुमति देता है।

\n\n

उदाहरण: भुगतान प्रसंस्करण प्रणाली। हमारे पास भुगतान के कई तरीके हैं: क्रेडिट कार्ड, PayPal, क्रिप्टोकरेंसी। प्रत्येक तरीके की अपनी सत्यापन और प्रसंस्करण तर्क है।

\n\n
<?php\n\n// स्ट्रैटेजी इंटरफ़ेस\ninterface PaymentStrategy\n{\n    public function pay(float $amount): void;\n    public function validate(): bool;\n}\n\n// विशिष्ट स्ट्रैटेजी\nclass CreditCardPayment implements PaymentStrategy\n{\n    private string $cardNumber;\n    private string $cvv;\n\n    public function __construct(string $cardNumber, string $cvv)\n    {\n        $this->cardNumber = $cardNumber;\n        $this->cvv = $cvv;\n    }\n\n    public function validate(): bool\n    {\n        // कार्ड नंबर की लंबाई की सरल जाँच\n        return strlen($this->cardNumber) === 16 && strlen($this->cvv) === 3;\n    }\n\n    public function pay(float $amount): void\n    {\n        if (!$this->validate()) {\n            throw new \\InvalidArgumentException("गलत कार्ड डेटा");\n        }\n        echo "क्रेडिट कार्ड {$this->cardNumber} से {$amount} का भुगतान किया गया।<br>";\n    }\n}\n\nclass PayPalPayment implements PaymentStrategy\n{\n    private string $email;\n\n    public function __construct(string $email)\n    {\n        $this->email = $email;\n    }\n\n    public function validate(): bool\n    {\n        return filter_var($this->email, FILTER_VALIDATE_EMAIL) !== false;\n    }\n\n    public function pay(float $amount): void\n    {\n        if (!$this->validate()) {\n            throw new \\InvalidArgumentException("गलत PayPal ईमेल");\n        }\n        echo "PayPal ({$this->email}) के माध्यम से {$amount} का भुगतान किया गया।<br>";\n    }\n}\n\n// संदर्भ (क्लाइंट)\nclass OrderProcessor\n{\n    private PaymentStrategy $strategy;\n\n    public function setPaymentStrategy(PaymentStrategy $strategy): void\n    {\n        $this->strategy = $strategy;\n    }\n\n    public function processOrder(float $total): void\n    {\n        if (!isset($this->strategy)) {\n            throw new \\RuntimeException("भुगतान विधि चयनित नहीं है");\n        }\n        $this->strategy->pay($total);\n    }\n}\n\n// उपयोग\n$order = new OrderProcessor();\n$order->setPaymentStrategy(new CreditCardPayment('1234567812345678', '123'));\n$order->processOrder(150.00);\n// आउटपुट: क्रेडिट कार्ड 1234567812345678 से 150 का भुगतान किया गया।\n\n?>
\n\n

लाभ: मौजूदा कोड को बदले बिना नए एल्गोरिदम (भुगतान के नए तरीके) जोड़ना आसान है। कोड लचीला और परीक्षण योग्य बनता है।

\n\n

2. फैक्ट्री मेथड पैटर्न (Factory Method)

\n\n

उद्देश्य: ऑब्जेक्ट बनाने के लिए एक इंटरफ़ेस परिभाषित करता है, लेकिन उपवर्गों को बनाए जाने वाले ऑब्जेक्ट के प्रकार को बदलने की अनुमति देता है। यह सभी क्रिएशनल पैटर्न के लिए मूल पैटर्न है।

\n\n

उदाहरण: उपयोगकर्ता के अनुरोध के आधार पर विभिन्न प्रकार की रिपोर्ट (PDF, HTML, JSON) उत्पन्न करना।

\n\n
<?php\n\n// अमूर्त उत्पाद\ninterface Report\n{\n    public function generate(): string;\n}\n\n// विशिष्ट उत्पाद\nclass PdfReport implements Report\n                

ब्लॉग

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