سؤال

ما هو الفرق بين أنماط الجسر والمحول؟

هل كانت مفيدة؟

المحلول

"المحول يجعل الأشياء تعمل بعد تصميمها؛الجسر يجعلهم العمل قبل أن يكونوا.[GoF، ص219]"

على نحو فعال، مشترك كهربائي يكون النمط مفيدًا عندما يكون لديك تعليمات برمجية موجودة، سواء كانت تابعة لجهة خارجية أو داخلية، ولكن خارجة عن سيطرتك، أو غير قابلة للتغيير لتلبية الواجهة التي تحتاجها تمامًا.على سبيل المثال، لدينا SuperWeaponsArray الذي يمكنه التحكم في مجموعة رائعة من أجهزة يوم القيامة.

public class SuperWeaponsArray {
  /*...*/

  public void destroyWorld() {
    for (Weapon w : armedWeapons) {
      w.fire();
    }
  }
}

عظيم.باستثناء أننا ندرك أن لدينا جهازًا نوويًا في ترسانتنا يسبق إلى حد كبير التحويل إلى واجهة الأسلحة.لكننا نود حقاً أن نعمل هنا...إذن ماذا نفعل...إسفين فيه!

NukeWeaponsAdaptor - يعتمد على فئة Nuke الخاصة بنا، ولكنه يصدر واجهة الأسلحة.عزيزي، الآن يمكننا بالتأكيد تدمير العالم.يبدو الأمر وكأنه نوع من الحماقة، لكنه يجعل الأمور تسير على ما يرام.


ال كوبري النمط هو شيء تقوم بتنفيذه مقدمًا - إذا كنت تعلم أن لديك تسلسلين هرميين متعامدين، فإنه يوفر طريقة لفصل الواجهة والتنفيذ بطريقة لا تحصل على عدد هائل من الفئات.لنفترض أن لديك:

أنواع MemoryMappedFile وDirectReadFile لكائنات الملفات.لنفترض أنك تريد أن تكون قادرًا على قراءة الملفات من مصادر مختلفة (ربما Linux مقابل Linux).تطبيقات Windows، وما إلى ذلك).يساعدك Bridge على تجنب الانتهاء من:

الذاكرةتعيين Windowsملف ميموريمابيدلينكس ملف DirectReadWindowsFile دايركت ريدلينكس فايل

نصائح أخرى

http://en.wikipedia.org/wiki/Adapter_pattern

ونمط محول هو أكثر حول الحصول على التعليمات البرمجية الموجودة للعمل مع نظام أحدث أو واجهة.

إذا كان لديك مجموعة من واجهات برمجة التطبيقات خدمة شبكة الإنترنت شركة القياسية التي ترغب في تقديم واجهة التمدد القائمة تطبيق آخر، هل يمكن أن تنظر كتابة مجموعة من محولات للقيام بذلك. لاحظ أن هناك منطقة رمادية وهذا هو أكثر حول كيفية تعريف تقنيا نمط، منذ أنماط أخرى مثل واجهة مماثلة.

http://en.wikipedia.org/wiki/Bridge_pattern

ونمط جسر سوف تسمح لك ربما لديك تطبيقات بديلة للخوارزمية أو النظام.

وعلى الرغم من عدم كلاسيكية نمط جسر سبيل المثال، تخيل لو كان لديك عدد قليل من تطبيقات متجر البيانات: واحد هو كفاءة في الفضاء، والآخر هو كفاءة في الأداء الخام ... وكان لديك حالة الأعمال التجارية لتقدم كل من في حياتك التطبيق أو الإطار.

في ناحية سؤالك، "أين يمكنني استخدام أي نمط"، والجواب هو، أينما كان من المنطقي للمشروع الخاص بك! ولعل النظر في تقديم توضيح تحرير لتوجيه النقاش حول حيث كنت تعتقد أنك بحاجة إلى استخدام واحد أو آخر.

مشترك كهربائي:

  1. إنه نمط هيكلي
  2. من المفيد العمل مع واجهتين غير متوافقتين

مخطط UML: من com.dofactory شرط:

enter image description here

هدف :يحدد الواجهة الخاصة بالمجال التي يستخدمها العميل.

مشترك كهربائي :يكيف واجهة Adaptee مع الواجهة الهدف.

المتكيف :يحدد واجهة موجودة تحتاج إلى التكيف.

عميل :يتعاون مع الكائنات المطابقة للواجهة الهدف.

مثال:

المربع والمستطيل شكلان مختلفان والحصول على المساحة () لكل منهما يتطلب طرقًا مختلفة.ولكن لا يزال العمل على شكل مربع على واجهة المستطيل مع تحويل بعض الخصائص.

public class AdapterDemo{
    public static void main(String args[]){
        SquareArea s = new SquareArea(4);
        System.out.println("Square area :"+s.getArea());
    }
}

class RectangleArea {
    public int getArea(int length, int width){
        return length * width;
    }
}

class SquareArea extends RectangleArea {

    int length;
    public SquareArea(int length){
        this.length = length;
    }
    public int getArea(){
        return getArea(length,length);
    }
}

كوبري:

  1. إنه نمط هيكلي
  2. إنه يفصل الفكرة عن تنفيذها ويمكن أن يختلف كلاهما بشكل مستقل
  3. من الممكن أن يتم استخدام التركيب بدلا من الميراث

يحرر: (حسب اقتراحquasoft)

لديك أربعة مكونات في هذا النمط.

  1. التجريد:فهو يحدد واجهة

  2. التجريد المكرر:ينفذ التجريد:

  3. المنفذ:ويحدد واجهة للتنفيذ

  4. ConcreteImplementor:أنها تنفذ واجهة المنفذ.

مقتطف الكود:

Gear gear = new ManualGear();
Vehicle vehicle = new Car(gear);
vehicle.addGear();

gear = new AutoGear();
vehicle = new Car(gear);
vehicle.addGear();

منشور له صلة:

متى تستخدم نمط الجسر؟كيف يختلف عن نمط المحول؟

الاختلافات الرئيسية: من صناعة المصادر شرط

  1. المحول يجعل الأشياء تعمل بعد تصميمها؛الجسر يجعلهم يعملون قبل أن يكونوا كذلك.
  2. تم تصميم Bridge مسبقًا للسماح باختلاف التجريد والتنفيذ بشكل مستقل.تم تحديث المحول لجعل الفئات غير المرتبطة تعمل معًا.

هذا المنشور موجود منذ فترة طويلة.ومع ذلك، من المهم أن نفهم أن الواجهة تشبه إلى حد ما المحول ولكنها ليست نفس الشيء تمامًا.يقوم المحول "بتكييف" فئة موجودة مع فئة عميل غير متوافقة عادةً.لنفترض أن لديك نظام سير عمل قديمًا يستخدمه تطبيقك كعميل.من الممكن أن تقوم شركتك باستبدال نظام سير العمل بنظام جديد "غير متوافق" (من حيث الواجهات).في معظم الحالات، يمكنك استخدام نمط المحول وكتابة التعليمات البرمجية التي تستدعي فعليًا واجهات محرك سير العمل الجديد.يتم استخدام الجسر بشكل عام بطريقة مختلفة.إذا كان لديك بالفعل نظام يحتاج إلى العمل مع أنظمة ملفات مختلفة (أي.القرص المحلي، NFS، وما إلى ذلك) يمكنك استخدام نمط الجسر وإنشاء طبقة تجريد واحدة للعمل مع جميع أنظمة الملفات الخاصة بك.سيكون هذا في الأساس حالة استخدام بسيطة لنمط الجسر.تشترك الواجهة والمحول في بعض الخصائص ولكن تُستخدم الواجهات عادةً لتبسيط واجهة/فئة موجودة.في الأيام الأولى لـ EJBs لم تكن هناك مكالمات محلية لـ EJBs.يحصل المطورون دائمًا على كعب الروتين، ويضيقون نطاقه ويطلقون عليه اسم "عن بعد زائف".تسبب هذا في كثير من الأحيان في حدوث مشكلات في الأداء (خاصة.عند الاتصال فعليًا عبر السلك).سيستخدم المطورون ذوو الخبرة نمط الواجهة لتوفير واجهة شديدة الحبيبات للعميل.ستقوم هذه الواجهة بدورها بإجراء مكالمات متعددة لطرق مختلفة أكثر دقة.وبشكل عام، أدى هذا إلى تقليل عدد استدعاءات الطريقة المطلوبة بشكل كبير وزيادة الأداء.

لنفترض انك قمت فئة الشكل التجريدي مع (عام / المستخرجة) وظيفة الرسم والدائرة الذي ينفذ الشكل. نمط جسر ببساطة هو نهج التجريد في اتجاهين لفصل تنفيذ (رسم في الدوار) وعام / وظائف المستخرجة (رسم في فئة الشكل).

وماذا يعني حقا؟ للوهلة الأولى، يبدو وكأنه شيء مما سبق (عن طريق الاعتماد انعكاس). لذلك لا تقلق عن وجود رمز قاعدة حدات أقل ridig أو أكثر. ولكن من فلسفة أعمق قليلا وراء ذلك.

ومن فهمي، والحاجة لنمط الاستخدام قد تنشأ عندما كنت في حاجة لإضافة فئات جديدة والتي ترتبط ارتباطا وثيقا مع النظام الحالي (مثل RedCircle أو GreenCircle) والتي تختلف من مجرد وظيفة واحدة (مثل لون). وأنا ستعمل الحاجة نمط جسر خصوصا إذا الطبقات النظام القائم (الدائرة أو الشكل) وإلى تغيير في كثير من الأحيان، وكنت لا تريد الطبقات المضافة حديثا أن تتأثر من هذه التغييرات. ولهذا السبب وتستخرج وظيفة الرسم العامة بعيدا إلى واجهة جديدة بحيث يمكنك تغيير السلوك رسم مستقل عن الشكل أو الدائرة.

تم تحسين

وجسر محول. يشمل جسر محول ويضيف المزيد من المرونة لذلك. هنا هو كيف عناصر من خريطة الجواب رافيندرا بين أنماط:

      Adapter  |    Bridge
    -----------|---------------
    Target     | Abstraction
    -----------|---------------
               | RefinedAbstraction
               |
               |   This element is Bridge specific. If there is a group of 
               |   implementations that share the same logic, the logic can be placed here.
               |   For example, all cars split into two large groups: manual and auto. 
               |   So, there will be two RefinedAbstraction classes.
    -----------|--------------- 
    Adapter    | Implementor
    -----------|---------------
    Adaptee    | ConcreteImplementor
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top