حبيت احط الأعضاء بجو النقاش بالنسبة لـ Adapter Pattern....
انت مبرمج جافا لديك واجهة برمجية API (لا على التعيين معتمدة أو غير معتمدة )
فيها صف ما (صف a )... فيه طريقه ما (طريقة x ) تتطلب برامتر لواجهة أو صف مجرد ما aI .
ولديك صف اخر (صف b ) حصلت عليه جاهز (لا تمتلك الـSource Code ) يرث الواجهة bI .
وتتطلب وظيفية تطبيقك تمرير هذا الصف الى الطريقة x .....

كيف سيحدث هذا !!!! والصف b لا يرث الصف الواجهة aI بل واجهة اخرى bI لا تمت بصلة للواجهة aI
لن نغير أي كلمة في الصف a
لن نغير أي كلمة في صفوف وطرق الـAPI .... عادة لايتوافر الـSource Code
والعمل ؟؟؟؟
سنخترع صف جديد Adapter مهمته من اسمه (الملائمة) ان يلائم أو يكيف الصف b ليناسب الصف a أي سنقوم بحيلة برمجية تجعل الصف b شكليا يرث الواجهة aI
نجعل الصف Adapter يرث الواجهة aI وينشيء غرضا من الصف b
ونكتب سلوك كل طريقة من طرق aI هو استدعاء ما يناسبها من طرق b
أي اغلف طرق الصف b بطرق الواجهة aI
أو بكلمة أخرى أجعل الصف b يتنكر بزي aI ليتسنى له المرور في الطريقة x دون ان ينزعج الـCompiler
هكذا حصلت على صف Adapter يملك خاصية امكانية التمرير عبر الطريقة x كبرامتر من نمط aI
وفي نفس الوقت ما زالت متاحة طرق الصف b للاستعمال بأسماءها الحقيقة .
الشكل التالي يبين البنية التصميمية للنموذج Adapter Pattern

نفس الشرح السابق (بعد ما لائمته Adapting it ليناسب الشكل في الصورة )
الصف Client يستخدم الصف المجرد أو الواجهة Target ( الواجهة المطلوب التحويل اليها )
ولديك صف Adaptee (المطلوب ملائمته) يرث واجهة ما (لا على التعيين )
ننشيء صف جديد Adapter يرث Target وننشيء فيه غرض من الصف Adaptee
كما نرى من الشكل الواجهة Target فيها الطريقة Request علينا كتابة سلوكها في Adapter ولكن سلوكها سيكون هو استدعاء الطريقة SpecificRequestالخاصة بالصف adaptee .
هكذا ضربنا عصفوين بالحجر Adapter
أولا : حصلنا وظيفية أو سلوك الصف adaptee (بأسماءها الحقيقية )
ثانيا : حصلنا على صف يمكن استخدامه و تمريره في الصف Client (يرث الواجهة Target)
يوجد شكل أخر للنموذج التصميمي Adapter Pattern:

هو بالاستفادة من خاصية الوراثة المتعددة للواجهات في جافا بجعل الصف Adapter يرث الواجهة adaptee والواجهة Target
نكتب السلوك الفعلي لطرق الواجهة adaptee
ونجعل سلوك طرق الواجهة Target هي استدعاء لطرق الواجهة adaptee المشابهة لها بالوظيفية .
يعتمد اختيارك على احد الشكلين لـ Adapter Pattern حسب الصنف المتوافر لديك هل هو >واجهة< أو> صف يرث واجهة <.
