تعريف الجسر: يفصل التجريد والسلوك ، ويجمع كل منهما بشكل مستقل ولكن ديناميكيًا.
لماذا تستخدم وضع الجسر
بشكل عام ، عندما يكون لدى فئة أو واجهة مجردة تطبيقات ملموسة متعددة (الفئة الفرعية الملموسة) ، قد تكون العلاقة بين هذه المخالب كما يلي:
1. هذه التطبيقات المحددة تكون موازية.
2. في التطبيق العملي ، غالبًا ما يكون من الممكن التداخل من الناحية النظرية بين هذه الفئات الخرسانية المتعددة. ثم نحتاج إلى فصل الملخص المشترك والسلوك المشترك.
على سبيل المثال ، على سبيل المثال ، هناك نوعان من القهوة: أكواب متوسطة وكبيرة ، وهناك أيضًا أنواع مختلفة من الحليب والحليب. إذا تم استخدام الميراث البسيط ، فهناك مفهوم تداخل بين هذه التطبيقات الأربعة المحددة (مليون كوب مع الحليب بدون حليب) لأن هناك أكواب متوسطة مع الحليب ، وهناك أكواب متوسطة بدون حليب. إنه أيضًا في كأس الأوسط. ثم نستخدم وضع الجسر لتنفيذه.
كيفية تنفيذ وضع الجسر
القهوة المذكورة أعلاه مثال. لقد خططنا في الأصل لتصميم واجهة واحدة (فئة مجردة).
لنلقي نظرة على رمز الواجهة للجزء التجريدي:
نسخة الكود كما يلي:
قهوة فئة مجردة عامة {
القهوة القهوة
public void setcoffeeimp () {
this.coffeeimp = coffeepsingleton.getTheCoffeimp () ؛
}
القهوة العامة getCoffeeimp () {return this.coffeeimp ؛}
Public Public void pourcoffee () ؛
}
القهوة هي واجهة سلوكية مع عدم وجود حليب.
نسخة الكود كما يلي:
القهوة المجردة العامة القهوة {
Public Public void pourcoffeeimp () ؛
}
الآن لدينا فئتان مجردين ، نرثهما على التوالي وننفذ فئة ملموسة:
نسخة الكود كما يلي:
// كأس الأوسط
الطبقة العامة المتوسطة يمتد القهوة {
MediumCoffee () {setCoffeeimp () ؛}
public pourcoffee () {
Coffeeimp Coffeep = this.getCoffeeimp () ؛
//نستخدم عدد التكرار لشرح ما إذا كان سيتم إنشاء كوب متوسطة أو كوب كبير.
coffeep.pourcoffeeimp () ؛
}
}
}
نسخة الكود كما يلي:
// كوب كبير
الطبقة العامة SupersizeCoffee يمتد القهوة {
supersizeCoffee () {setCoffeeimp () ؛}
public pourcoffee () {
Coffeeimp Coffeep = this.getCoffeeimp () ؛
//نستخدم عدد التكرار لشرح ما إذا كان سيتم صنع كوب متوسطة أو كوب كبير.
coffeep.pourcoffeeimp () ؛
}
}
}
ما ورد أعلاه هي التطبيقات المحددة للكأس المتوسطة والكوب الكبير على التوالي.
نسخة الكود كما يلي:
// إضافة الحليب
الطبقة العامة MilkCoffeeimp يمتد القهوة {
milkcoffeeimp () {}
public pourcoffeeimp () {
System.out.println ("Moxted Delicious Milk") ؛
}
}
// لا يضاف الحليب
الطبقة العامة regrantcoffeeimp يمتد القهوة {
fragrantcoffeeimp () {}
public pourcoffeeimp () {
System.out.println ("لا شيء مضاف ، عطر جديد") ؛
}
}
لقد أنشأنا بالفعل الإطار الأساسي لنموذج الجسر.
1. أضف الحليب إلى كوب متوسط
2. لم يضاف الحليب في الكأس المتوسطة
3. أضف الحليب إلى كوب كبير
4. كوب كبير بدون حليب
دعونا نرى كيف يتم دمجها ديناميكيًا.
نسخة الكود كما يلي:
الطبقة العامة Coffeepsingleton {
قهوة قهوة ثابتة خاصة ؛
القهوة العامة (القهوة القهوة)
{this.coffeeimp = coffeeimpin ؛}
القهوة الثابتة العامة getTheCoffeeimp () {
إعادة القهوة
}
}
دعونا نرى كيف يخرج الكوب المتوسط من الحليب وكوب كبير من الحليب:
// أخرج الحليب
coffeepsingleton coffeepsingleton = coffeepsingleton new (new MilkCoffeeimp ()) ؛
// كأس الأوسط مع الحليب
MediumCoffee MediumCoffee = جديد mediumCoffee () ؛
mediumCoffee.pourCoffee () ؛
// كوب كبير من الحليب
supersizeCoffee supersizeCoffee = جديد supersizeCoffee () ؛
supersizeCoffee.pourcoffee () ؛
ملاحظة: تعتبر فصول التنفيذ من مخطط الجسر مثل القهوة والقهوة علاقات فردية ، وإنشاء القهوة بشكل صحيح هو مفتاح هذا المخطط.
تطبيق وضع الجسر في EJB
يوجد نمط كائن الوصول إلى البيانات (DAO) في EJB ، والذي يفصل بين منطق العمل وموارد البيانات المحددة لأن قواعد البيانات المختلفة لها عمليات قاعدة بيانات مختلفة. يتم استخلاص السلوكيات التي تشغل قواعد بيانات مختلفة بشكل مستقل في واجهة سلوكية DAO ، على النحو التالي:
1. كائن الأعمال (على غرار القهوة)
تنفيذ بعض العمليات التجارية المجردة: مثل العثور على مستخدم لوضع جميع الطلبات. يتم استخدام daoimplementor لعمليات قاعدة البيانات.
2. كائن الوصول إلى data (على غرار القهوة)
بعض العمليات المجردة على موارد قاعدة البيانات.
3. daoimplementor مثل OrderDaocs ، Orderdaooracle ، Orderdaosybase (على غرار Milkcoffeeimp fragrantcoffeeimp)
عمليات قاعدة بيانات محددة ، مثل "إدراج في" والبيانات الأخرى ، OrderDaoOoracle هي Oracle OrderDaosyBase هي قاعدة بيانات Sybase.
4. قاعدة البيانات (Cloudscape ، Oracle ، أو Sybase Database عبر JDBC API)