غالبا ما نواجه هذا الموقف. مع فئتين جاهزين ، لا يوجد أي صلة بينهما ، لكننا نريد الآن استخدام إحدى طرق الفصل والآخر. هناك حل بديل لتعديل واجهاتهم ، ولكن هذا ما لا نريد رؤيته. في هذا الوقت ، سيكون وضع المحول مفيدًا.
يسمى وضع المحول أيضًا وضع المحول ، وهو أحد أوضاع التصميم 23 التي اقترحتها GOF. وضع المحول هو أحد الأوضاع البناءة. من خلال وضع المحول ، يمكن تغيير نموذج واجهة الفئات الموجودة (أو الفئات الخارجية).
هناك ثلاث طرق لوضع المحول ، إحداها محول كائن ، واحد هو محول فئة ، والآخر هو محول الواجهة
يتم إعطاء الأمثلة التالية:
1. محول الفئة
الرسم البياني الفئة
الفئة العامة DrawRectangle {// رسم مربع public void drawRectangle (String msg) {system.out.println ("draw strenge:" + msg) ؛ }} الواجهة العامة IdRawcircle {// رسم واجهة الدائرة void drawCircle () ؛ } / ** * يستخدم محول الفئة وراثة الكائن ، وهي طريقة تعريف ثابت * Author Stone * */ الفئة العامة DrawAdapter4Class يمتد أدوات DrawRectangle DrawRectlicle idrawcircle {// يمكنها رسم مربع و CircleRdride Public Void DrawCircle () {system.Out.println ( }}2. محول الكائن
مخطط الفصل:
/*** محول الكائن: طريقة استخدام مجموعة الكائن هي وسيلة للجمع ديناميكيًا. * يمكن أن ترسم مربع ودوائر * @الحجر الحجري * DrawAdapter هو محول ، وسلك DrawRectangle ينتمي إلى المحول وهو المحول. سوف يتكيف المحول مع المحول والمحول (DrawCircle) * *// public class drawAdapter4Object ينفذ Idrawcircle {// يمكن أن يرسم مربعًا ودوائر DrawRectangle الزانق ؛ public drawAdapter4Object (DrawRectangle DrawRectangle) {this.drawRectangle = drawRectangle ؛ } Override public void drawCircle () {system.out.println ("drawAdapter4Object: drawCircle") ؛ } public void drawRectangle (String msg) {drawRectangle.drawRectangle (msg) ؛ }} 3. محول الواجهة
الرسم البياني الفئة
/ * * محول الواجهة: هناك طرق مجردة في الواجهة. نريد فقط تنفيذ عدد قليل منهم ، لكننا لا نريد تنفيذها جميعًا. * لذا ، قم بتوفير تطبيق فارغ افتراضي ، ثم يرث منه ، وأعد كتابة الطريقة التي نريد تنفيذها */ واجهة عامة Idraw {void drawCircle () ؛ void drawRectangle () ؛ } /** التنفيذ الافتراضي لمحول الواجهة*/الفئة العامة DefaultDrawAdapter ينفذ idraw {// تنفيذ مربع ودوائر Override public void drawcircle () {} adoverride public void drawRectangle () {}} اختبار الفئة العامة {public static void main (string [] args) {// كائن محول drawAdapter4Object objadapter = new DrawAdapter4Object (new DrawRectangle ()) ؛ objadapter.drawcircle () ؛ objadapter.drawRectangle ("في drawAdapter4Object") ؛ System.out.println ("-------------------") ؛ // Class Adapter DrawAdapter4Class clzadapter = new DrawAdapter4Class () ؛ clzadapter.drawcircle () ؛ clzadapter.drawRectangle ("في drawAdapter4Class") ؛ System.out.println ("-------------------") ؛ // واجهة محول mydrawadapter mydrawadapter = جديد mydrawadapter () ؛ mydrawadapter.drawcircle () ؛ mydrawadapter.drawRectangle () ؛ } فئة ثابتة mydrawadapter تمتد defaultDrawAdapter {Override public void drawCircle () {system.out.println ("drawCircle in mydrawadapter") ؛ }}}مطبعة
DrawAdapter4Object: DrawCircle Draw Rectangle: in DrawAdapter4Object -------------- DrawAdapter4Class: DrawCircle Draw Rectangle: in DrawAdapter4Class ------------------- DrawCircle in mydrawadapter
ثلاث ميزات لوضع المحول:
1 يقوم كائن المحول بتنفيذ الواجهة الأصلية
2 يجمع كائن المحول بين كائن يقوم بتنفيذ واجهة جديدة (لا يمكن لهذا الكائن أيضًا تطبيق واجهة ، فهو مجرد كائن بسيط)
3. طريقة محددة يتم فيها تفويض المكالمة إلى طريقة الواجهة الأصلية للمحول إلى مثيل الواجهة الجديدة
يعتقد بعض الناس أن الأمثلة التي تشرح نمط التصميم بسيط للغاية ، ويبدو بهذه الطريقة ، ولكن إذا كنت ترغب حقًا في استخدامه في تطوير المشروع ، فلن يكون قادرًا على تطبيقه. في الواقع ، لا يتعين علينا استخدام أنماط التصميم عمدا في مشاريعنا ، ولكن يجب أن نبدأ من مشاكل التصميم الفعلية واستخدام النموذج الذي يمكن أن يحل مشاكلنا. لا تستخدم النمط من أجل استخدام النمط ، ثم تخطي الأرض. بشكل عام ، طالما أنك تتبع بعض مبادئ التصميم ، يتم تلخيص نمط التصميم أيضًا بناءً على هذه المبادئ. إذا كنت على دراية بهذه المبادئ ، فسيكون النمط بشكل طبيعي.