نمط تصميم المحول هو نمط هيكلي يسمح للكائنات ذات الواجهات غير المتوافقة بالعمل معًا. وهو يعمل كوسيط (أو محول) بين كائنين، حيث يقوم بتحويل واجهة أحد الكائنات إلى الواجهة المتوقعة من الكائن الآخر. وهذا يسمح للفئات التي قد تكون غير متوافقة لأن لديها واجهات مختلفة بالتعاون دون تعديلات على الكود الأصلي الخاص بها.
هيكل المحول
يتكون نمط المحول بشكل عام من ثلاثة عناصر رئيسية:
العميل: الفئة التي تتوقع العمل مع كائنات واجهة معينة.-
Adaptee: الفئة التي لها واجهة غير متوافقة مع العميل، ولكن وظائفها ضرورية.-
المحول: الفئة التي تنفذ الواجهة المتوقعة من قبل العميل وتحول المكالمات إلى واجهة Adaptee.-
أنواع المحولات
- محول الكائن: يعتمد على التركيب. يحتوي المحول على مثيل للفئة التي يقوم بتكييفها.
- محول الفئة: يعتمد على الوراثة (عادةً في اللغات التي تدعم الوراثة المتعددة).
متى يجب استخدام المحول؟
عندما تريد استخدام فصل دراسي موجود، ولكن واجهته لا تتطابق مع ما يتوقعه العميل.-
لدمج وظائف جديدة في نظام قديم، دون الحاجة إلى تعديل الكود القديم.-
هذا النمط مفيد في الأنظمة التي تحتاج إلى العمل مع المكتبات الخارجية أو واجهات برمجة التطبيقات، مما يسمح لك بتكييف وظائفها دون تغيير كود هذه المكتبات.
مثال باستخدام PHPMailer
فيما يلي مثال لكيفية استخدام نمط تصميم المحول لدمج PHPMailer مع واجهة مخصصة.
الموقف:
لنفترض أن نظامك يتوقع أن تقوم أي فئة إرسال بريد إلكتروني بتنفيذ واجهة تسمى IMailer، لكن
PHPMailer لا يتبع هذه الواجهة مباشرة. سيتم استخدام المحول لتكييف PHPMailer مع الواجهة المتوقعة من قبل النظام.
تثبيت PHPMailer عبر الملحن
يتطلب الملحن phpmailer/phpmailer
composer require phpmailer/phpmailer
نظام الدليل
؟محول
┣ ؟سرك
┃ ┣ واجهات
┃ ┃ ┗ ?IMailer.php
┃ ┣ محولات
┃ ┃ ┗ PHPMailerAdapter.php
┃ ┗ الخدمات
┃ ┗ ?ServicoDeEmail.php
┣ ؟ بائع
┣ ؟composer.json
┗ ؟index.php
composer require phpmailer/phpmailer
التحميل التلقائي
في ملف Composer.json (الموجود في جذر المشروع)، أضف مساحة اسم التطبيق لتحميل الفئات تلقائيًا:
{
"التحميل التلقائي": {
"بي إس آر-4": {
"التطبيق\\": "src/"
}
},
"يتطلب": {
"phpmailer/phpmailer": "^6.5"
}
}
composer require phpmailer/phpmailer
واجهة IMailer
تطبيق\واجهات مساحة الاسم؛
واجهة آي ميلر {
إرسال الوظيفة العامة($to, $subject, $message);
}
composer require phpmailer/phpmailer
فئة PHPMailerAdapter
تطبيق \ محولات مساحة الاسم ؛
استخدم PHPMailer\PHPMailer\PHPMailer؛
استخدم PHPMailer\PHPMailer\Exception؛
استخدم التطبيق\الواجهات\IMailer؛
فئة PHPMailerAdapter تنفذ IMailer {
خاص $phpMailer؛
الوظيفة العامة __ بناء () {
$this->phpMailer = new PHPMailer(true);
// تكوين PHPMailer الأساسي
$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');
}
}
composer require phpmailer/phpmailer
إرسال الوظيفة العامة($to, $subject, $message) {
يحاول {
$this->phpMailer->addAddress($to);
$this->phpMailer->Subject = $subject;
$this->phpMailer->Body = $message;
$this->phpMailer->send();
صدى "تم إرسال البريد الإلكتروني بنجاح!";
} التقاط (استثناء $e) {
echo "فشل إرسال البريد الإلكتروني: {$this->phpMailer->ErrorInfo}";
}
}
composer require phpmailer/phpmailer
خدمة البريد الإلكتروني للفصل
تطبيق\خدمات مساحة الاسم؛
استخدم التطبيق\الواجهات\IMailer؛
فئة خدمة البريد الإلكتروني {
الارسال $ الخاص؛
الوظيفة العامة __construct(IMailer $mailer) {
$this->mailer = $mailer;
}
}
composer require phpmailer/phpmailer
- طريقة إرسال البريد الإلكتروني إلى العميل
الوظيفة العامة sendEmailToClient($to, $subject, $message) {
$this->mailer->send($to, $subject, $message);
}
composer require phpmailer/phpmailer
ملف Index.php
يتطلب "vendor/autoload.php"؛
استخدم App\Adapters\PHPMailerAdapter;
استخدم التطبيق\الخدمات\EmailService؛
// إنشاء محول PHPMailer
$mailer = new PHPMailerAdapter();
// استخدام خدمة البريد الإلكتروني مع واجهة IMailer
$emailService = new EmailService($mailer);
// إرسال بريد إلكتروني
$emailService->sendEmailToClient('
[email protected]', 'موضوع البريد الإلكتروني', 'محتوى الرسالة.');
composer require phpmailer/phpmailer
شرح الهيكل
IMailer.php: يحدد واجهة IMailer التي يجب على أي نظام بريد إلكتروني تنفيذها.-
PHPMailerAdapter.php: يتكيف PHPMailer مع واجهة IMailer.-
EmailService.php: خدمة البريد الإلكتروني التي تستخدم واجهة IMailer لإرسال رسائل البريد الإلكتروني.-
Index.php: الملف الرئيسي الذي يستخدم خدمة البريد الإلكتروني لإرسال رسالة.-