एडेप्टर डिज़ाइन पैटर्न एक संरचनात्मक पैटर्न है जो असंगत इंटरफेस वाली वस्तुओं को एक साथ काम करने की अनुमति देता है। यह दो वस्तुओं के बीच एक मध्यस्थ (या एडाप्टर) के रूप में कार्य करता है, एक वस्तु के इंटरफ़ेस को दूसरे द्वारा अपेक्षित इंटरफ़ेस में परिवर्तित करता है। यह उन कक्षाओं को अनुमति देता है जो अन्यथा असंगत होतीं क्योंकि उनके पास अपने मूल कोड में संशोधन किए बिना सहयोग करने के लिए अलग-अलग इंटरफ़ेस होते हैं।
एडेप्टर संरचना
एडेप्टर पैटर्न आम तौर पर तीन मुख्य तत्वों से बना होता है:
एडेप्टर के प्रकार
एडेप्टर का उपयोग कब करें?
यह पैटर्न उन प्रणालियों में उपयोगी है जिन्हें बाहरी पुस्तकालयों या एपीआई के साथ काम करने की आवश्यकता होती है, जिससे आप इन पुस्तकालयों के कोड को बदले बिना उनकी कार्यक्षमता को अनुकूलित कर सकते हैं।
यहां कस्टम इंटरफ़ेस के साथ PHPMailer को एकीकृत करने के लिए एडाप्टर डिज़ाइन पैटर्न का उपयोग करने का एक उदाहरण दिया गया है।
परिस्थिति:
आइए मान लें कि आपका सिस्टम किसी भी ईमेल भेजने वाले वर्ग से IMailer नामक इंटरफ़ेस लागू करने की अपेक्षा करता है, लेकिन PHPMAILer सीधे इस इंटरफ़ेस का अनुसरण नहीं करता है। एडाप्टर का उपयोग सिस्टम द्वारा अपेक्षित इंटरफ़ेस के लिए PHPMailer को अनुकूलित करने के लिए किया जाएगा।
संगीतकार के माध्यम से PHPMailer स्थापित करें
composer require phpmailer/phpmailer
निर्देशिका प्रणाली
?Adapter ┣ ?src ┃ ┣ ?Interfaces ┃ ┃ ┗ ?IMailer.php ┃ ┣ ?Adapters ┃ ┃ ┗ ?PHPMailerAdapter.php ┃ ┗ ?Services ┃ ┗ ?ServicoDeEmail.php ┣ ?vendor ┣ ?composer.json ┗ ?index.php
ऑटोलोड
composer.json फ़ाइल में (प्रोजेक्ट के मूल में स्थित), कक्षाओं को स्वचालित रूप से लोड करने के लिए ऐप नेमस्पेस जोड़ें:
{ "autoload": { "psr-4": { "App\\": "src/" } }, "require": { "phpmailer/phpmailer": "^6.5" } }
इंटरफ़ेस आईमेलर
namespace App\Interfaces; interface IMailer { public function send($to, $subject, $message); }
क्लास PHPMailerAdapter
namespace App\Adapters; use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; use App\Interfaces\IMailer; class PHPMailerAdapter implements IMailer { private $phpMailer; public function __construct() { $this->phpMailer = new PHPMailer(true); // Basic PHPMailer configuration $this->phpMailer->isSMTP(); $this->phpMailer->Host = 'smtp.example.com'; $this->phpMailer->SMTPAuth = true; $this->phpMailer->Username = '[email protected]'; $this->phpMailer->Password = 'password'; $this->phpMailer->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; $this->phpMailer->Port = 587; $this->phpMailer->setFrom('[email protected]', 'Your Name'); } }
public function send($to, $subject, $message) { try { $this->phpMailer->addAddress($to); $this->phpMailer->Subject = $subject; $this->phpMailer->Body = $message; $this->phpMailer->send(); echo 'Email sent successfully!'; } catch (Exception $e) { echo "Failed to send email: {$this->phpMailer->ErrorInfo}"; } }
क्लास ईमेलसेवा
namespace App\Services; use App\Interfaces\IMailer; class EmailService { private $mailer; public function __construct(IMailer $mailer) { $this->mailer = $mailer; } }
public function sendEmailToClient($to, $subject, $message) { $this->mailer->send($to, $subject, $message); }
फ़ाइल Index.php
require 'vendor/autoload.php'; use App\Adapters\PHPMailerAdapter; use App\Services\EmailService; // Creating the PHPMailer Adapter $mailer = new PHPMailerAdapter(); // Using the email service with the IMailer interface $emailService = new EmailService($mailer); // Sending an email $emailService->sendEmailToClient('[email protected]', 'Email Subject', 'Message content.');
संरचना का स्पष्टीकरण
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3