تعريف
وضع المحول (محول) هو تحويل واجهة (طريقة أو سمة) لفئة (كائن) إلى واجهة أخرى (الطريقة أو السمة) التي يريدها العميل. يسمح وضع المحول بتلك الفئات (الكائنات) التي لم تتمكن في الأصل من العمل معًا بسبب عدم توافق الواجهة. غلاف سريع.
الاسم المستعار للمحول هو غلاف ، وهو نمط بسيط نسبيا. هناك العديد من هذه السيناريوهات في تطوير البرنامج: عندما نحاول استدعاء واجهة وحدة أو كائن ، نجد أن تنسيق هذه الواجهة لا يفي بالمتطلبات الحالية. هناك حلان في هذا الوقت. الأول هو تعديل تطبيق الواجهة الأصلية ، ولكن إذا كانت الوحدة الأصلية معقدة للغاية ، أو أن الوحدة النمطية التي نحصل عليها هي رمز مضغوط كتبه شخص آخر ، فإن تعديل الواجهة الأصلية سيكون غير واقعي. الطريقة الثانية هي إنشاء محول وتحويل الواجهة الأصلية إلى واجهة أخرى يريد العميل. يحتاج العميل فقط إلى التعامل مع المحول.
لماذا تحتاج إلى استخدام وضع المحول؟
عند تطوير تطبيق ، غالبًا ما تحتاج إلى استبدال جزء منه ، على سبيل المثال ، مكتبة تستخدمها للاحتفاظ بسجلات أو محتوى مشابه. عندما تستبدلها بمكتبة جديدة ، فمن غير المرجح أن يكون للمكتبة الجديدة الواجهة نفسها بالضبط. من هنا ، لديك خياران:
(1) تحقق من جميع التعليمات البرمجية وتغيير جميع التعليمات البرمجية التي تشير إلى المكتبة القديمة.
(2) إنشاء محول حتى تتمكن المكتبة الجديدة من استخدام الواجهة نفسها مثل المكتبة القديمة.
من الواضح ، في بعض الحالات ، إذا كان تطبيقك صغيرًا ، أو كانت هناك عدد قليل من الإشارات إلى المكتبة القديمة ، فمن الأنسب التحقق من الكود الكامل وتغييره لمطابقة المكتبة الجديدة بدلاً من إضافة طبقة تجريد جديدة لجعل الكود أكثر تعقيدًا. ومع ذلك ، في معظم الحالات ، يكون إنشاء محول أكثر عملية وتوفير الوقت.
أمثلة رمز JavaScript
عندما يحدث شيء ما ، سيحدث ذلك بالتأكيد. أولاً ، دعونا نلقي نظرة على هذا Little LoggerFactory ، والذي يسمح لنا بتعديل واجهة السجل التي نستخدمها بسهولة أكبر.
var loggerFactory = {getLogger: function () {return window.console ؛ } ، ...} ؛/* use example*/var logger = loggerfactory.getLogger () ؛ logger.log ("شيء للتسجيل") ؛عندما نسمي getLogger ، فإنه يعيد لنا كائن وحدة التحكم (وحدة التحكم). لهذا التمرين ، ندعي أن كائن وحدة التحكم لديه طريقة واحدة فقط - سجل ، ويمكن أن يتلقى فقط معلمة نوع سلسلة واحدة. بعد ذلك ، لدينا واجهة سجل أخرى ، والتي ستكون أكثر تعقيدًا لأن 1) يتم تنفيذها في JavaScript ، على عكس وحدة التحكم ، والتي ليست المتصفح نفسه ؛ 2) سوف يرسل السجلات إلى الخادم من خلال AJAX ، مما يعني أيضًا أنه يتعين علينا تشفير بيانات عنوان URL (لن يقوم الرمز على وجه التحديد بتنفيذ الأمور ذات الصلة بعنوان URL ، لأنه لا علاقة له بنمط المحول الذي نريد التحدث عنه). بالطبع ، سوف يستخدم واجهة مختلفة من وحدة التحكم.
var ajaxlogger = {sendlog: function () {var data = this.urlencode (mations) ؛ jquery.ajax ({url: "http://example.com/log" ، data: data}) ؛ } ، urlencode: function (arg) {... return encodedData ؛ } ، ...} ؛استخدمنا طلبات jQuery Ajax ، وذلك بشكل أساسي لتوفير الوقت وتجاهل الأشياء التي لا نريد القيام بها مع وضع المحول. ما يتعين علينا القيام به الآن هو إنشاء محول وتغيير LoggerFactory السابق لإرجاع هذا المحول بدلاً من كائن وحدة التحكم.
var ajaxloggerAdapter = {log: function (arg) {ajaxlogger.sendlog (arg) ؛ }} ؛/ * ضبط loggerFactory */var loggerFactory = {getLogger: function () {// تغيير قيمة الإرجاع ajaxloggerAdapter ؛ } ، ...} ؛لقد أجرينا سطرًا واحدًا فقط من التغييرات على الكود الحالي ، ويمكن للبرنامج بأكمله استخدام واجهة السجل الجديدة هذه.
محول معقد
واجهة السجل هي مثال بسيط للغاية. لديها طريقة واحدة فقط ، وليس من الصعب تعيينها مباشرة إلى الطريقة القديمة. هذا ليس هو الحال في معظم الحالات. قد تواجه المشكلة التي تشير إلى أن معلمات هذه الوظائف المعينة مختلفة تمامًا ، وقد لا تحتوي الواجهة القديمة على هذه المعلمات على الإطلاق ، وعليك التعامل معها بنفسك. في بعض الحالات ، يجب عليك حذف بعض المعلمات لأن واجهات جديدة لا تستخدمها على الإطلاق. إذا كان رسم خرائط الواجهة بين كائنين صعبًا للغاية ، فيجب علينا التفكير في طرق أخرى ، على أي حال ، لا أريد العثور على آلاف الخطوط من الكود القديم وتعديلها.