آداپتـــور(مـُبــــــدِل)
هـــدف
مـسئـــلـه
تصور کنید که در حال ایجاد یک برنامه نظارت بر بازار سهام هستید. این برنامه دادههای سهام را از منابع مختلف به فرمت XML دانلود میکند و سپس نمودارها و دیاگرامهای زیبایی را برای کاربر نمایش میدهد.
در برخی مواقع، تصمیم میگیرید برنامه را با ادغام یک کتابخانه تحلیلی هوشمند شخص ثالث بهبود بخشید. اما یک مشکل وجود دارد: کتابخانه تحلیلی فقط با دادهها در قالب JSON کار میکند.
میتوانید کتابخانه را طوری تغییر دهید که با XML کار کند. با این حال، این ممکن است برخی از کدهای موجود که به کتابخانه وابسته هستند را خراب کند. و بدتر از آن، ممکن است در وهله اول به کد منبع کتابخانه دسترسی نداشته باشید که این رویکرد را غیرممکن میکند.
راهــکــــار
میتوانید یک آداپتور ایجاد کنید. این یک شیء خاص است که رابط یک شی را به گونهای تبدیل میکند که شی دیگری بتواند آن را درک کند.
یک آداپتور یکی از اشیاء را میپوشاند تا پیچیدگی تبدیل اتفاق افتاده در پشت صحنه را پنهان کند. شی پوشیده شده حتی از وجود آداپتور آگاه نیست. به عنوان مثال، میتوانید یک شیء که با متر و کیلومتر کار میکند را با یک آداپتور بپوشانید که تمام دادهها را به واحدهای امپریال مانند فوت و مایل تبدیل میکند.
آداپتورها نه تنها میتوانند دادهها را به فرمتهای مختلف تبدیل کنند، بلکه میتوانند به اشیاء با رابطهای مختلف در همکاری کمک کنند. اینگونه کار میکند:
- آداپتور یک رابط سازگار با یکی از اشیاء موجود دریافت میکند.
- با استفاده از این رابط، شی موجود میتواند با خیال راحت متدهای آداپتور را فراخوانی کند.
- پس از دریافت یک فراخوانی، آداپتور درخواست را به شی دوم منتقل میکند، اما به فرمت و ترتیبی که شی دوم انتظار دارد.
- گاهی اوقات حتی میتوان یک آداپتور دو طرفه ایجاد کرد که بتواند فراخوانیها را در هر دو جهت تبدیل کند.
بیایید به برنامه نظارت بر بازار سهام خود بازگردیم. برای حل مشکل فرمتهای ناسازگار، میتوانید آداپتورهای XML به JSON را برای هر کلاس کتابخانه تحلیلی که کد شما مستقیماً با آن کار میکند، ایجاد کنید. سپس کد خود را طوری تنظیم کنید که فقط از طریق این آداپتورها با کتابخانه ارتباط برقرار کند. هنگامی که یک آداپتور یک فراخوانی دریافت میکند، دادههای XML ورودی را به یک ساختار JSON ترجمه میکند و فراخوانی را به متدهای مناسب یک شی تحلیلگر بستهبندی شده منتقل میکند.
مقایسه با دنیای واقعی
ســاخــتـــار
آداپـــتـــور شئگــــرا