تتمثل وظيفة نمط الوسيط في فصل علاقة الاقتران الضيقة بين الكائنات ، والتي تسمى أيضًا "الوسيط". تتواصل جميع الكائنات من خلال الكائن الوسيط ، بدلاً من الإشارة إلى بعضها البعض ، لذلك عندما يتغير كائن ، تحتاج فقط إلى إخطار الوسيط.
على سبيل المثال: برج قيادة المطار ، تحتاج كل طائرة فقط إلى التواصل مع برج القيادة. يعرف برج القيادة حالة الرحلة لكل طائرة ، ويمكنها ترتيب جميع أوقات الإقلاع والهبوط ، وضبط الطرق ، إلخ.
يتوافق النموذج الوسيط مع القانون الديميتي ، أي مبدأ المعرفة الأقل ، مما يعني أن الكائن يجب أن يعرف أقل قدر ممكن عن كائن آخر. إذا كان الاقتران بين الكائنات مرتفعًا جدًا ، فإن تغيير الكائن سيؤثر على العديد من الكائنات ويصعب الحفاظ عليه. عندما يكون اقتران الكائن ضيقًا ، يكون من الصعب تعديل كائن واحد دون التأثير على الكائنات الأخرى.
إذا كان الاقتران المعقد بين الكائنات يسبب صعوبات في الاتصال والصيانة ، ونمو درجات الاقتران هذه بشكل كبير مع التغييرات في المشروع ، فيمكننا التفكير في إعادة تمثيل الكود بنمط وسيط! الوسطاء يحسنون قابلية الصيانة من الكود من خلال فك الارتباط.
مثال 1: اللعبة
يتم إنشاء كائن اللاعب من خلال مُنشئ اللاعب () وله نقاطه وسمات الاسم الخاصة به. طريقة play () على النموذج الأولي هي المسؤولة عن إضافة نقطة إلى نفسها وإخطار الوسيط:
مشغل الوظيفة (الاسم) {this.points = 0 ؛ this.name = name ؛} player.prototype.play = function () {this.points += 1 ؛ الوسيط. played () ؛} ؛يحتوي كائن لوحة النتائج (لوحة النتائج) على طريقة تحديث () ، والتي يطلق عليها الوسيط بعد انتهاء كل لاعب. لا يعرف التحليل أي معلومات حول اللاعب على الإطلاق ، ولا يحفظ الدرجات. إنه مسؤول فقط عن عرض الدرجات التي قدمها الوسيط:
var scoreboard = {element: document.getElementById ('results') ، update: function (score) {var i ، msg = '' ؛ لـ (i in score) {if (score.hasownproperty (i)) {msg + = '<p> <strong>' + i + '<// strong>:' ؛ msg += score [i] ؛ msg += '<// p>' ؛ }} this.element.innerhtml = msg ؛ }} ؛الآن دعونا نلقي نظرة على كائن الوسيط (الوسيط). عند تهيئة اللعبة ، قم بإنشاء المشغل في طريقة الإعداد () ، ثم وضع سمة اللاعب للاستخدام اللاحق. سيتم استدعاء طريقة تشغيل () من قبل اللاعب بعد كل جولة. يقوم بتحديث جدول تجزئة النتيجة ثم ينقله إلى لوحة النتائج للعرض. الطريقة الأخيرة هي keypress () ، التي تتولى أحداث لوحة المفاتيح ، وتقرر اللاعب الذي يلعبه ، ويبلغها:
var mediator = {players: {} ، الإعداد: function () {var players = this.players ؛ players.home = لاعب جديد ("الصفحة الرئيسية") ؛ players.guest = New Player ('Guest') ؛ } ، تم تشغيله: function () {var players = this.players ، score = {home: players.home.points ، guest: players.guest.points} ؛ لوحة النتائج. update (النتيجة) ؛ } ، keypress: function (e) {e = e || window.event ؛ // ie if ( يعود؛ } if ( يعود؛ }}} ؛آخر شيء هو تهيئة وإنهاء اللعبة:
// go! midiator.setup () ؛ window.onkeypress = midiator.keypress ؛ // game أكثر في 30 ثانية (function () {window.onkeypress = null ؛ Alert ('Game Over!') ؛} ، 30000) ؛مثال 2: بيع الهاتف المحمول
VARS Goods = {// Inventory 'Red | 32G': 3 ، 'Red | 16G': 5 ، 'Blue | 32G': 3 ، 'Blue | 16g': 6} // InterDediator var mediator = (function () {function id (id) {return document.getElementById (id) ؛ المعرف ('numberput') ، colorInfo = id ('colorinfo') ، memoryInfo = id ('memoryinfo') ، numberInfo = id ('numberInfo') ، nextbtn = id ('nextbtn') ؛ البضائع+'+الذاكرة] ؛ NumberInfo.Innerhtm = number ؛ NextBranted = true ؛ MEDIATR.CHanged (this) ؛} numberInput.Onchange = function () {modiator.Changed (this) ؛}المراجع: "نمط جافا سكريبت" "نمط تصميم جافا سكريبت وممارسة التطوير"
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.