التعريف المركب: قم بتنظيم الكائنات في بنية شجرة لتحقيق التسلسل الهرمي "الجزئي" ، بحيث يكون للعميل استخدامًا ثابتًا للكائنات الفردية والكائنات المدمجة.
المركب أسهل في الفهم. هذه الكائنات في هيئة التكوين لها واجهة مشتركة. يمكن وصفه بأنه سحب مائة تحركات.
لذلك ، يستخدم الوضع المركب وضع ITERATOR ، وهو ما يشبه سلسلة المسؤولية.
فوائد مركبة:
1. اجعل المكالمات البسيطة ، ويمكن للعميل استخدام بنية تركيبة أو كائن واحد بطريقة متسقة. شفرة.
2. من الأسهل إضافة أجزاء الكائن إلى الجسم المركب. لا يتعين على العميل تغيير الرمز لأنه أضاف مكون كائن جديد.
كيفية استخدام المركب
أولاً ، تحديد واجهة أو فئة مجردة. إدارة التركيبات المركبة.
يتم تعريف الكود التالي على أنه فئة مجردة ، ويحاول عمومًا استخدام الواجهة قدر الإمكان.
نسخة الكود كما يلي:
معدات الفئة المجردة العامة {
اسم السلسلة الخاصة ؛
// سعر الإنترنت
الملخص العام double netprice () ؛
// سعر الخصم
التجريد الجمهور DEBLUTPRICE () ؛
// إضافة طريقة قطع الغيار
إضافة منطقية عامة (معدات المعدات) {return false ؛
// حذف طريقة الجزء
إزالة منطقية عامة (معدات المعدات) {return false ؛
// لاحظ هنا ، إليك طريقة للوصول إلى فئات المكونات.
ITERATOR العامة iter () {return null ؛
المعدات العامة (اسم السلسلة النهائية) {this.name = name ؛
}
معدات الفئة المجردة هي تعريف المكون ، ويمثل كائنات الفئة المركبة ، ويتم تعريف العديد من الطرق الشائعة في المعدات.
نسخة الكود كما يلي:
يمتد قرص الطبقة العامة المعدات {
القرص العام (اسم السلسلة) {super (name) ؛
// تحديد سعر شبكة القرص إلى 1
Public Double NetPrice () {Return 1. ؛
// تحديد سعر خصم القرص هو 0.5 ٪.
خصم مزدوج عام () {return .5 ؛
}
القرص هو كائن ، أو مكون ، في الجسم المركب ، وهو عنصر واحد (بدائي).
الاحتمال الآخر هو أن المكون هو أيضًا مزيج ، أي "الابن" تحت هذا المكون. الآن نحتاج إلى تحديد هذا المزيج:
نسخة الكود كما يلي:
مجردة الفئة المركب يمتد المعدات {
private int i = 0 ؛
// تحديد ناقل لتخزين "الابن"
معدات LSIT الخاصة = ArrayList () جديد ؛
Public CompositeEpment (اسم السلسلة) {super (name) ؛
إضافة منطقية عامة (معدات المعدات) {
this.equipment.add (المعدات) ؛
العودة صحيح.
}
Public Double NetPrice () {
NetPrice مزدوج = 0. ؛
iterator iter = equiment.iterator () ؛
لـ (iter.hasnext ())
netPrice+= ((المعدات) iter.next ()). netPrice () ؛
إرجاع NetPrice ؛
}
Public Defoune Discounprice () {
خصم مزدوج = 0. ؛
iterator iter = equiment.iterator () ؛
لـ (iter.hasnext ())
DiscountPrice+= ((المعدات) iter.next ()). DiscountPrice () ؛
عائد خصم
}
// لاحظ هنا ، إليك طريقة للوصول إلى المكونات في مجموعة خاصة بك.
// السبب وراء عدم وجود القرص أعلاه هو أن القرص عنصر واحد.
ITERATOR العام iter () {
إرجاع المعدات. iterator () ؛
}
// overload طريقة Iterator
boolean hasnext () {return i <earnds.size () ؛
// overload طريقة Iterator
الكائن العام التالي () {
إذا (hasnext ())
إرجاع المعدات. Elementat (i ++) ؛
آخر
رمي nosuchelementException () ؛
}
}
يرث المركب المركب أعلاه الجهاز ، ويوفر طرق وصول خارجية للكائنات الموجودة بداخله ، ويعتبر التكرار الزائد.
دعنا نلقي نظرة على فئتين محددتين من هيكل صندوق القرص وخزانة مربع. المربع ، مثل محرك الأقراص المرنة القرص الصلب ، إلخ. مما لا شك فيه ، كلاهما من الجمع.
نسخة الكود كما يلي:
الهيكل العام من الطبقة العامة يمتد مركب {
الهيكل العام (اسم السلسلة) {super (name) ؛
Public Double NetPrice () {return 1.+super.netprice () ؛
Public Double Decortprice () {Return .5+Super.DiscountPrice () ؛
}
يمتد مجلس الوزراء من الطبقة العامة composite {
مجلس الوزراء العام (اسم السلسلة) {super (name) ؛
Public Double NetPrice () {return 1.+super.netprice () ؛
Public Double Decortprice () {Return .5+Super.DiscountPrice () ؛
}
حتى الآن أكملنا بنية النموذج المركب بأكمله.
يمكننا أن ننظر إلى رمز استدعاء العميل يتكون:
نسخة الكود كما يلي:
مجلس الوزراء = خزانة جديدة ("برج") ؛
هيكل الهيكل = هيكل جديد ("هيكل الكمبيوتر") ؛
// إدراج هيكل الكمبيوتر الشخصي في برج (حزم القرص في الصندوق)
مجلس الوزراء (الهيكل) ؛
// أدخل محرك أقراص ثابت 10 جيجابايت إلى هيكل الكمبيوتر الشخصي (قم بتثبيت القرص الصلب في مربع القرص)
chassis.add (قرص جديد ("10 غيغابايت")) ؛
// استدعاء طريقة netPrice () ؛
system.out.println ("netPrice ="+cabinet.netprice ()) ؛
System.out.println ("DiscountPrice ="+Cabinet.DiscountPrice ()) ؛
الأساليب المذكورة أعلاه هي NetPrice () أو DiscountPrice ().
المركب هو نموذج ذكي للغاية يجسد الحكمة.
أخذ المنتدى على سبيل المثال ، هناك العديد من المنشورات (المنتدى). ، لذلك ندخل Jive نلقي نظرة على كيفية تنفيذها.
تشريح جيف
في Jive ، FormthRead هي حاوية حاوية (مزيج) من forMissages. وهذا يعني أن ForumthRead يشبه المركب في مثالنا السابق.
نسخة الكود كما يلي:
[خيط]
|- [رسالة]
|- [رسالة]
|- [رسالة]
|- [رسالة]
|- [رسالة]
نرى الكود التالي في ForumthRead:
نسخة الكود كما يلي:
الواجهة العامة ForumThread {
....
Addmessage الفراغ العام (forUmmessage ParentMessage ، forummessage newmessage)
يرمي غير مصرح به.
حذف الفراغ العام (رسالة forummessage)
يرمي غير مصرح به.
رسائل التكرار العامة () ؛
....
}
على غرار CompositeEquipment ، فإنه يوفر طرقًا للوصول إلى المكونات في الجسم المركب الخاص بك: إضافة وحذف وتجارة.
استنادًا إلى تحليلي لـ Jive في نماذج أخرى ، فهمنا بشكل أساسي إطار نظام Jive Forum. .