1. ملخص بشكل عام
1. يتحدث المؤلف لفترة وجيزة عن ذلك
دعونا نعطي مثالاً بسيطاً من حياتنا اليومية. عندما نذهب إلى وكالة عقارية لاستئجار منزل ، تشكل الوكالة العقارية وسيطًا بين المستأجر ومؤجر المالك. المستأجر لا يهتم من يستأجر. مؤجر المالك لا يهتم بمن يستأجره. أصبحت هذه الصفقة مريحة للغاية بسبب وجود وسيط.
أثناء عملية تطوير البرمجيات ، سيكون هناك حتما موقف حيث تتفاعل فئات متعددة أو أنظمة فرعية مع بعضها البعض ، والتفاعل معقد للغاية ، مما يؤدي إلى معرفة كل فئة من الطبقات التي يحتاجها إلى التفاعل معها ، بحيث يبدو اقترانها قويًا للغاية. يتأثر الجسم كله بحركة واحدة ، والعواقب خطيرة للغاية ، والدب الكبير غاضب للغاية! ~~~~ (> _ <) ~~~~
حسنًا ، منذ طرح السؤال ، يرجى دعوة بطل الرواية في هذه القضية - النموذج الوسيط الذي يظهر.
وظيفة الوسيط هي تغليف التفاعل بين الكائنات. إذا كانت عمليات الكائن ستؤدي إلى تغييرات على كائنات أخرى ذات صلة ، ولا يريد هذا الكائن التعامل مع هذه العلاقات بمفرده ، فيمكنك العثور على وسيط والسماح لها بالتعامل مع هذه العلاقات المزعجة. انظر المثال الصغير التالي:
نسخة الكود كما يلي:
var المشارك = الدالة (الاسم) {
this.name = name ؛
this.chatroom = null ؛
} ؛
المشاركين. النموذج = {
إرسال: وظيفة (رسالة ، إلى) {
this.chatroom.send (رسالة ، هذا ، إلى) ؛
} ،
تلقي: وظيفة (رسالة ، من) {
log.add (من .Name + "إلى" + this.name + ":" + message) ؛
}
} ؛
var chatroom = function () {
var المشاركين = {} ؛
يعود {
التسجيل: وظيفة (مشارك) {
المشاركون [المشاركين. اسم] = مشارك ؛
المشارك. chatroom = هذا ؛
} ،
إرسال: وظيفة (رسالة ، من ، إلى) {
إذا (إلى) {
to.receive (رسالة ، من) ؛
} آخر {
لـ (المفتاح في المشاركين) {
إذا (المشاركون [المفتاح]! == من) {
المشاركون [مفتاح] .receive (رسالة ، من) ؛
}
}
}
}
} ؛
} ؛
var log = (function () {
var log = "" ؛
يعود {
إضافة: function (msg) {log + = msg + "/n" ؛ } ،
show: function () {Alert (log) ؛ log = "" ؛ }
}
}) () ؛
وظيفة التشغيل () {
var yoko = مشارك جديد ("yoko") ؛
var John = مشارك جديد ("جون") ؛
var paul = مشارك جديد ("بول") ؛
var ringo = مشارك جديد ("Ringo") ؛
var chatroom = New Chatroom () ؛
chatroom.register (yoko) ؛
chatroom.register (John) ؛
chatroom.register (paul) ؛
chatroom.register (Ringo) ؛
yoko.send ("كل ما تحتاجه هو الحب.") ؛
yoko.send ("أحبك يا جون.") ؛
John.send ("مهلا ، لا حاجة للبث" ، يوكو) ؛
بول. سند ("ها ، أسمع ذلك!") ؛
Ringo.send ("بول ، ما رأيك؟" ، بول) ؛
log.show () ؛
}
في رمز العينة ، لدينا أربعة مشاركين ، انضم إلى جلسة الدردشة عن طريق تسجيل غرفة الدردشة (Meadry). ممثل المشاركين لكل مشارك. يرسل المشاركون رسائل إلى بعضهم البعض ومعالجة الطرق إلى غرف الدردشة.
تلعب كائنات غرفة الدردشة هنا دور الوسيط ، وتنسيق كائنات أخرى ، وتنظيمها بشكل معقول ، وتقليل الاقتران.
2. مرجع حالة رمز المصدر
يجب أن نكون على دراية جدًا بنموذج MVC ذو ثلاث طبقات صلبة (نموذج) ، وطبقة العرض التقديمي (عرض) وطبقة التحكم (التحكم/الوسيط).
طبقة التحكم هي الوسيط بين طبقة العرض التقديمي وطبقة النموذج. بشكل عام ، MVC هو أيضًا تطبيق للنموذج الوسيط في تصميم الإطار.
3. مقدمة الحالة
نسخة الكود كما يلي:
مشغل الوظيفة (الاسم) {
this.points = 0 ؛
this.name = name ؛
}
player.prototype.play = function () {
this.points += 1 ؛
الوسيط.
} ؛
لوحة النتائج VAR = {
العنصر: document.getElementById ('النتائج') ،
تحديث: وظيفة (نقاط) {
var i ، msg = '' ؛
ل (أنا في النتيجة) {
if (score.hasownproperty (i)) {
msg + = '<p> <strong>' + i + '<// strong>:' ؛
msg += score [i] ؛
msg += '<// p>' ؛
}
}
this.element.innerhtml = msg ؛
}
} ؛
var mediator = {
اللاعبون: {} ،
الإعداد: function () {
var players = this.players ؛
players.home = لاعب جديد ("الصفحة الرئيسية") ؛
players.guest = New Player ('Guest') ؛
} ،
لعبت: وظيفة () {
var players = this.players ،
النتيجة = {
الصفحة الرئيسية: Players.home.points ،
الضيف: لاعبي
} ؛
لوحة النتائج. update (النتيجة) ؛
} ،
keypress: function (e) {
e = e || window.event ؛
if (e.hich === 49) {
midiator.players.home.play () ؛
يعود؛
}
if (e.hich === 48) {
midiator.players.guest.play () ؛
يعود؛
}
}
} ؛
الوسيط.
window.onkeypress = midiator.keypress ؛
setTimeout (function () {
window.onkeypress = null ؛
console.log ('Game Over!') ؛
} ، 30000) ؛
أربعة ، دعونا نلخص
لماذا الوسيط؟
هناك العديد من التفاعلات بين الكائنات. تعتمد العمليات السلوكية لكل كائن على بعضها البعض لتعديل سلوك كائن واحد ، وفي نفس الوقت يتضمن تعديل سلوك العديد من الكائنات الأخرى.
إذا كنت تستخدم وضع الوسيط ، فيمكن تخفيف الاقتران بين كل كائن. ما عليك سوى الاهتمام بالعلاقة مع الوسيط ، وتحويل العلاقة بين العديد من العدد إلى علاقة واحدة إلى حد.
يمكن أن يقلل من تعقيد النظام ويحسن قابلية التوسع القابلة للتعديل.
المناسبات باستخدام النموذج الوسيط
1. مجموعة محددة جيدًا من الكائنات التي تتطلب الآن اتصالًا معقدًا.
2. تخصيص سلوك موزع في فئات متعددة دون الرغبة في إنشاء الكثير من الفئات الفرعية.
يمكن ملاحظة أن كائنات الوساطة تستخدم بشكل أساسي لتغليف السلوك ، والمشاركين في السلوك هم تلك الكائنات ، ولكن من خلال الوسيط ، لا تحتاج هذه الكائنات إلى معرفة بعضهم البعض. (تنفيذ محدد لقانون ديميت)
مزايا استخدام النموذج الوسيط:
1. يقلل من الاقتران بين كائنات النظام ، مما يجعل إعادة استخدام الكائنات بشكل مستقل.
2. تحسين مرونة النظام وجعل النظام سهلاً للتوسع والصيانة.
عيوب استخدام نمط الوسيط:
عيوب النموذج الوسيط واضحة ، لأن هذا "الوسيط" يتحمل المزيد من المسؤوليات ، لذلك بمجرد وجود مشكلة في الكائن الوسيط ، سيتأثر النظام بأكمله بشكل كبير.