نموذج وسيط
يشجع التصميم الموجهة نحو الكائنات توزيع السلوكيات عبر الكائنات ، والتي يمكن أن تؤدي إلى العديد من الاتصالات بين الكائنات. في أسوأ الحالات ، يحتاج كل كائن إلى معرفة جميع الكائنات الأخرى.
على الرغم من أن تقسيم النظام إلى العديد من الكائنات يمكن أن يعزز قابلية إعادة الاستخدام ، فإن الزيادة في الكائنات المترابطة ستقلل من قابلية إعادة الاستخدام. يجعل عدد كبير من علاقات الاتصال من المستحيل على كائن العمل دون مساعدة من الكائنات الأخرى (يتجلى النظام ككل غير قابل للتجزئة ) ، ومن الصعب إجراء أي تغييرات كبيرة على سلوك النظام في هذا الوقت. نظرًا لأنه يتم توزيع السلوك بين العديد من الكائنات ، فإن النتيجة هي أنه يجب تعريف العديد من الفئات الفرعية لتخصيص سلوك النظام. لذلك ، قدمنا وسيط كائن الوسيط :
من خلال الكائن الوسيط ، يمكن تحويل نظام بنية الشبكة إلى بنية نجمة تركز على الوسيط . لم يعد كل كائن معين لديه علاقة مباشرة مع كائن آخر ، ولكن يتم توسطه منه عبر الكائن الوسيط. يجعل إدخال الكائن الوسيط أيضًا أن بنية النظام لا تخضع لعدد كبير من التعديلات بسبب إدخال كائنات جديدة.
وضع الوسيط: المعروف أيضًا باسم وضع الوسيط ، يستخدم كائنًا وسيطًا لتغليف تفاعل سلسلة من الكائنات ، بحيث لا يلزم عرض كل كائن وإشارة إلى بعضها البعض ، وبالتالي تخفيف الاقتران وتغيير تفاعلاتها بشكل مستقل :
(مصدر الصورة: نمط التصميم: أساس البرمجيات الموجهة للكائنات القابلة لإعادة الاستخدام) نصائح: كل زميل يعرف فقط وجود الوسيط ، ولا يحتاج إلى معرفة ما إذا كان الزملاء الآخرون موجودين (أو كيفية فصلهم). لا يحتاج إلا إلى إرسال رسالة إلى الوسيط ، ثم إعادة توجيهها إلى زملاء آخرين (يخزن الوسيط جميع علاقات الزملاء ، والوسيط وحده يعرف عدد/ الزملاء الموجودين هناك).
تنفيذ الوضع
تتخلى الأمم المتحدة من مختلف البلدان وتوسط العلاقات مع كل بلد:
ترسل الدول وتلقي رسائل إلى مجلس الأمن التابع للأمم المتحدة ، والتي "مناسبة" الطلبات التي توجه بين الدول للعمل التعاوني:
كلية
فئة زميل مجردة ، حدد الأساليب العامة لكل زميل:
/** * Author Jifang * since 16/8/28 4:22 PM. */Public Abstract Class Country {Murtenced Unitednations Mediator ؛ اسم السلسلة الخاصة ؛ البلد العام (الوسيط الموحد ، اسم السلسلة) {this.mediator = الوسيط ؛ this.name = name ؛ } السلسلة العامة getName () {return name ؛ } محمي خلاصة void DECLARE (سلسلة msg) ؛ استلام باطل مجردة محمية (سلسلة MSG) ؛}-----------------------------------------------------------------------------------
concretecolleague
زملاء محددين:
• كل فصل زميل يعرف كائن الوسيط.
• يتواصل كل كائن زميل مع وسيطه عندما يحتاج إلى التواصل مع الزملاء الآخرين.
يمتد الفئة USA Country {Public USA (Unitednations Misiator ، اسم السلسلة) {Super (MEDIATR ، NAME) ؛ } Override public void DECLARE (String msg) {mediator.declare (this ، msg) ؛ } Override public void rece (string msg) {system.out.println ("ustity strup required: [" + msg + "]") ؛ }} الفئة العراق يمتد البلد {public العراق (الوسيط Unitednations ، اسم السلسلة) {super (الوسيط ، الاسم) ؛ } Override public void DECLARE (String msg) {mediator.declare (this ، msg) ؛ } Override public void rece (string msg) {system.out.println ("requist required: [" + msg + "]") ؛ }} Class China يمتد البلد {public China (Modiator Unitednations ، اسم السلسلة) {super (الوسيط ، الاسم) ؛ } Override public void DECLARE (String msg) {mediator.declare (this ، msg) ؛ } override public void rece (String msg) {system.out.println ("china rected: [" + msg + "]") ؛ }}-----------------------------------------------------------------------------------
وسيط
الوسيط التجريدي: تحديد واجهة للتواصل مع كائنات الزميل:
الفئة المجردة العامة Unitednations {قائمة محمية <Tearry> البلدان = New LinkedList <> () ؛ سجل الفراغ العام (بلد البلد) {البلدان. add (البلد) ؛ } public void إزالة (بلد البلد) {البلدان. )-----------------------------------------------------------------------------------
concretemediator
وسيط محدد:
• فهم وصيانة زملائها الفرديين ؛
• إدراك السلوك التعاوني من خلال تنسيق كل كائن زميل (تلقي رسائل من الزملاء وإصدار أوامر إلى زملاء محددين).
يمتد الفئة UnitedNationsSecurityCouncil Unitednations { / ** * يتوسط مجلس الأمن في الوسط * * param Country * param msg * / Override void denare (Country Country ، String msg) {for (country tocountry: coulle) {if (! tocountry.receive (name + "قل بسلام:" + msg) ؛ }}}} إذا لم يكن هناك تمديد ، يمكن دمج الوسيط مع concretemediator في واحد.
•عميل
عميل الفئة العامة {test public void client () {UnitedNations Mediator = New UnitedNationsSecurityCouncil () ؛ Country USA = New USA (الوسيط ، "الولايات المتحدة الأمريكية") ؛ بلد الصين = الصين الجديد (الوسيط ، "الصين") ؛ بلد العراق = العراق الجديد (الوسيط ، "العراق") ؛ الوسيط. Register (الولايات المتحدة الأمريكية) ؛ وسيط. Register (الصين) ؛ الوسيط. Register (العراق) ؛ USA.Declare ("أريد مهاجمة العراق ، الذي يهتم بمن أنا في عجلة من أمري !!!") ؛ System.out.println ("------------------") ؛ الصين. declare ("نحن ندين بقوة !!!") ؛ System.out.println ("-----------------------") ؛ العراق. }}-----------------------------------------------------------------------------------
ملخص
يقلل ظهور الوسيط من الاقتران بين كل كلية ، مما يسمح لتغيير الزميل والوسيط بشكل مستقل وإعادة استخدامه. نظرًا لأن الكائنات تتعاون ، يتم أخذ الوساطة كمفهوم مستقل ومغلف في كائن ما ، يتم تحويل تركيز الاهتمام من سلوك كل من الكائنات نفسه إلى التفاعل بينهما ، بحيث يمكن عرض النظام من منظور ماكرو أكثر.
• قابلية التطبيق
من السهل تطبيق النموذج الوسيط في النظام ويسهل إساءة استخدامه في النظام. عندما تظهر مجموعة كائنات معقدة "العديد من العدد" في النظام ، لا تستعجل لاستخدام الوسيط. من الأفضل أولاً التفكير فيما إذا كان تصميم النظام معقولًا. نظرًا لأن concretemediator يتحكم في المركزية ، يصبح تعقيد التفاعل تعقيدًا للوسيط ، مما يجعل الوسيط أكثر تعقيدًا من أي concretecolleague. يوصى باستخدام النموذج الوسيط في المواقف التالية:
◦ تتواصل مجموعة من الكائنات بطريقة محددة جيدًا ولكنها معقدة. الترابط الناتج عن الاعتمادات المربكة ويصعب فهمها.
◦ يشير كائن إلى العديد من الكائنات الأخرى ويتواصل مباشرة مع هذه الكائنات ، مما يجعل من الصعب إعادة استخدام الكائن.
◦ تريد تخصيص سلوك موزع بين فئات متعددة ، ولكن لا تريد إنشاء الكثير من الفئات الفرعية.
• أوضاع ذات صلة
◦FACADE يختلف عن الوسطاء من حيث أنه يجرح نظامًا فرعيًا للكائن ، وبالتالي يوفر واجهة أكثر ملاءمة. بروتوكولها أحادي الاتجاه ، أي أن كائنات الواجهة تقدم طلبات إلى فئة النظام الفرعي هذه ، ولكن لا يمكنها ذلك. على العكس من ذلك ، يوفر الوسيط سلوكيات تعاون غير مدعومة أو لا يمكن دعمها من قبل كل كائن جامعي ، والبروتوكول متعدد الاتجاهات.
يمكن أن يتواصل ColleaGue مع الوسيط باستخدام وضع المراقب.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.