يصف هذا المثال استخدام وضع المركب لتنفيذ وظيفة تمثيل الهيكل التنظيمي للشركة. شاركه للرجوع إليه ، على النحو التالي:
1. تعريف نمط
وضع المركب: الجمع بين الكائنات في بنية شجرة لتمثيل التسلسل الهرمي "الكامل جزئيًا". يجعل وضع المركب المستخدمين متسقة مع استخدام الكائنات الفردية والكائنات المدمجة.
2. أمثلة على أوضاع الجمع
1 تحليل نمط
نحن نقترض المخطط التنظيمي للشركة لتوضيح هذا النموذج.
بعد التحليل ، نحصل على الرسم التخطيطي للطبقة الثابتة لهذا النمط على النحو التالي:
2 أمثلة رمز
2.1 إنشاء فصول تجريدية للموظف
package com.demo.composite ؛/** * واجهة فئة الموظفين * * Author * */موظفي الفئة التجريدية العامة {// رقم الموظف المحمي NO ؛ // اسم الموظف اسم السلسلة المحمية ؛ // موقف السلسلة المحمية ؛ // راتب الراتب العائم. // بطول الممتلكات الخاصة بطول int الخاص ؛ . this.name = name ؛ this.position = الموضع ؛ هذا. // احسب طول البايت الكلي this.length += (no == null || ".equals (no.trim ()))؟ 0: No.GetBytes (). الطول ؛ this.length += (name == null || "" .equals (name.trim ()))؟ 0: name .getBytes (). الطول ؛ this.length += (الموضع == null || "" .equals (position.trim ()))؟ 0: position.getBytes (). الطول ؛ this.length += string.valueof (راتب) .getBytes (). الطول ؛ }. } // إضافة معلومات الموظف المجردة المجردة إضافة (موظفي الموظفين) ؛ // حذف موظفي الموظفين التجريديين العامين (سلسلة رقم) ؛ // معلومات الموظف المطبوعة العامة التجريدية باطلة plictemployeesinfo (int layer) ؛ // طباعة عدة أحرف محمية باطلة printchar (int layer) {for (int j = 0 ؛ j <layer * 2 ؛ j ++) {system.out.print ("-") ؛ }} // private method يطبع خط printline printline محمي () {system.out.print ("+") ؛ لـ (int i = 0 ؛ i <this.length+4 ؛ i ++) {system.out.print ("-") ؛ } system.out.println ("-") ؛ } السلسلة العامة getno () {return no ؛ } public void setno (سلسلة no) {this.no = no ؛ } السلسلة العامة getName () {return name ؛ } public void setName (اسم السلسلة) {this.name = name ؛ } السلسلة العامة getPosition () {return position ؛ } setPosition public void (موضع السلسلة) {this.position = position ؛ } getSalary getSalary () {راتب العودة ؛ } setSalary public void (راتب تعويم) {this.salary = salary ؛ }}2.2 إنشاء مدير
package com.demo.composite.sub ؛ استيراد java.util.arraylist ؛ استيراد com.demo.composite.staff ؛/** * مدير (شخص مع موظفين آخرين تحت قيادته) * * @Author * */مدير الطبقة العامة يمتد الموظفين {// orter معلومات حول arraylist final arraylist <Staft> arraylist = new ArrayList <) . } / *** إضافة موظف* / Override public void add (موظفي الموظفين) {this.arrayList.add (staff) ؛ } / *** حذف معلومات الموظف* / Override Public Remaint (سلسلة NO) {موظفي الموظفين = null ؛ if (no! = null &&! " } if (no.equals (this.arrayList.get (i) .getno ())) {staff = this.arrayList.Remove (i) ؛ استراحة؛ }}} موظفي الإرجاع ؛ } / *** طباعة معلومات الموظف* / Override public void plantemployeesinfo (int layer) {int tmplayer = ++ layer ؛ لـ (int i = 0 ؛ i <this.arraylist.size () ؛ i ++) {if (this.arrayList.get (i) == null) {conter ؛ } // print '-' 'printchar (tmplayer) ؛ // طباعة معلومات الموظف الأساسية this.arrayList.get (i) .printuserBaseInfo () ؛ // طباعة معلومات الموظف تحت مشاركتك this.arraylist.get (i) .printemplyeEesInfo (tmplayer) ؛ }}}2.3 إنشاء موظفين عاديين
package com.demo.composite.sub ؛ استيراد com.demo.composite.staff ؛/** * الموظفين العاديين (يعملون حقًا) * * Author * */موظفو الفئة العامة يمتد الموظفين {// إنشاء الموظفين العموميين (سلسلة لا ، اسم السلسلة ، موقف السلسلة ، راتب العائمة) } / *** إضافة معلومات الموظف* / Override public void add (موظفي الموظفين) {return ؛ } / *** حذف معلومات الموظف* / Override Public Amstrict Remove (String NO) {// return null return fream ؛ } / *** طباعة معلومات الموظف* / Override public void plantemployeesinfo (int layer) {return ؛ }}2.4 اختبار العميل
package com.demo ؛ import com.demo.composite.staff ؛ import com.demo.composite.sub.employees ؛ import com.demo.composات رئيس "،" الرئيس التنفيذي "، 100000) ؛ / *** الرئيس التنفيذي لديه العديد من مديري الأقسام*/// مدير قسم التمويل ، المدير التمويري = مدير جديد ("11" ، "الرئيس تشانغ" ، "مدير قسم المالي" ، 60000) ؛ // مدير موظفي الموظفين = مدير جديد ("12" ، "الرئيس وانغ" ، "مدير الرئيس" ، 60000) ؛ . / *** هناك أيضًا مساعدين والعديد من المشرفين في القسم الفني* //// موظفي DeptAssistant = New Manager ("1301" ، "Assistant Wang" ، "Assistant Department" ، 20000) ؛ . / ** * المشرف الفني DeptManager1 هناك مهندسون برمجيات (الشخص الذي يعمل في النهاية) */ SoftwareEngineer1 = موظفين جدد ("1302001" ، "Zhang San" ، "Engineer" ، 5000) ؛ SoftwareEngineer2 = موظفون جدد ("1302002" ، "Li Si" ، "Software Engineer" ، 5500) ؛ SoftwareEngineer3 = موظفين جدد ("1302003" ، "Wang Wu" ، "Software Engineer" ، 4500) ؛ // إضافة معلومات الموظف للمدير الفني 1 deptmanager1.add (SoftwareEngineer1) ؛ deptmanager1.add (SoftwareEngineer2) ؛ DeptManager1.Add (SoftwareEngineer3) ؛ . // إضافة إلى مدير القسم الفني: مساعد القسم ، المدير الفني 1 والمدير الفني 2 TechnicalManager.Add (DeptAssistant) ؛ TechnicalManager.add (DeptManager1) ؛ TechnicalManager.Add (DeptManager2) ؛ // مدير التسويق stustr MarketingManager = مدير جديد ("14" ، "Mr. Wu" ، "Market Manager" ، 60000) ؛ // إضافة إلى المدير التنفيذي: مدير قسم المالية ، مدير إدارة الموارد البشرية ، مدير القسم الفني ومدير التسويق Boss.Add (Financemanager) ؛ Boss.Add (PersonnelManager) ؛ Boss.Add (TechnicalManager) ؛ Boss.Add (MarketingManager) ؛ // Print CEO Information Boss.printuserBaseInfo () ؛ // PRINT CEO Employee Information Boss.printemplyEesInfo (1) ؛ }}نتائج التشغيل كما يلي:
| الرئيس التنفيذي لشركة Big Boss 100000.0
--- | 11 مدير قسم المالية في تشانغ 60000.0
--- | 12 مدير إدارة الموارد البشرية في وانغ 60000.0
--- | 13 مدير قسم التقنية العام في تشن 60000.0
------ | 1301 مساعد قسم Wang Assistant 20000.0
----- | 1302 المشرف 1 المشرف الفني 30000.0
------- | 1302001 Zhang San Software Engineer 5000.0
------- | 1302002 LI SI Software Engineer 5500.0
------- | 1302003 Wang Wu Software Engineer 4500.0
------ | 1303 المشرف 2 المشرف الفني 30000.0
---
3. مبادئ تصميم هذا النموذج
1 علاج الأشياء الفردية والمجتمعة بشكل موحد
2 برمجة موجهة تجريدية
4. استخدام المناسبات
1 عندما تريد تمثيل التسلسل الهرمي "الجزئي والكامل" للكائن.
2 عندما يريد المستخدم تجاهل الفرق بين كائن مشترك وكائن واحد ، سيستخدم المستخدم جميع الكائنات في الهيكل المشترك بشكل موحد.
مخطط الفئة الثابتة لوضع المركب كما يلي
لمزيد من المعلومات حول خوارزميات Java ، يمكن للقراء المهتمين بهذا الموقع عرض الموضوعات: "بنية بيانات Java وبرنامج تعليمي الخوارزمية" ، "ملخص" Tips Java ".
آمل أن يكون هذا المقال مفيدًا لبرمجة Java للجميع.