亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

JavaScript設計模式之調停者模式實例詳解

2019-11-19 14:25:21
字體:
來源:轉載
供稿:網友

本文實例講述了JavaScript設計模式之調停者模式。分享給大家供大家參考,具體如下:

1、定義

調停者模式包裝了一系列對象相互作用的方式,使得這些對象不必相互明顯作用。從而使他們可以松散偶合。當某些對象之間的作用發生改變時,不會立即影響其他的一些對象之間的作用。保證這些作用可以彼此獨立的變化。調停者模式將多對多的相互作用轉化為一對多的相互作用。調停者模式將對象的行為和協作抽象化,把對象在小尺度的行為上與其他對象的相互作用分開處理。

2、使用的原因

當對象之間的交互操作很多,且每個對象的行為操作都依賴彼此時,為防止在修改一個對象的行為時,同時涉及到修改很多其他對象的行為,可采用調停者模式,來解決緊耦合問題.

該模式將對象之間的多對多關系變成一對多關系,調停者對象將系統從網狀結構變成以調停者為中心的星形結構,達到降低系統的復雜性,提高可擴展性的作用.

調停者設計模式結構圖:

調停者模式包括以下角色:

●抽象調停者(Mediator)角色:定義出同事對象到調停者對象的接口,其中主要方法是一個(或多個)事件方法。
●具體調停者(ConcreteMediator)角色:實現了抽象調停者所聲明的事件方法。具體調停者知曉所有的具體同事類,并負責具體的協調各同事對象的交互關系。
●抽象同事類(Colleague)角色:定義出調停者到同事對象的接口。同事對象只知道調停者而不知道其余的同事對象。
●具體同事類(ConcreteColleague)角色:所有的具體同事類均從抽象同事類繼承而來。實現自己的業務,在需要與其他同事通信的時候,就與持有的調停者通信,調停者會負責與其他的同事交互。

JS實現代碼:

CD光驅

function CDDriver( mediator ) {  //持有一個調停者對象  this.mediator = mediator;  /**   * 獲取當前同事類對應的調停者對象   */  this.getMediator = function() {    return mediator;  } //光驅讀取出來的數據 this.data = "";  /**   * 獲取光盤讀取出來的數據   */  this.getData = function() {    return this.data;  }  /**   * 讀取光盤   */  this.readCD = function(){    //逗號前是視頻顯示的數據,逗號后是聲音    this.data = "西游記,老孫來也!";    //通知主板,自己的狀態發生了改變    this.getMediator().changed(this);  }}

CPU處理器

function CPU( mediator ) { //持有一個調停者對象 this.mediator = mediator; /**  * 獲取當前同事類對應的調停者對象  */ this.getMediator = function() {   return mediator; }  //分解出來的視頻數據  this.videoData = "";  //分解出來的聲音數據  this.soundData = "";  /**   * 獲取分解出來的視頻數據   */  this.getVideoData = function() {    return this.videoData;  }  /**   * 獲取分解出來的聲音數據   */  this.getSoundData = function() {    return this.soundData;  }  /**   * 處理數據,把數據分成音頻和視頻的數據   */  this.executeData = function(data){    //把數據分解開,前面是視頻數據,后面是音頻數據    var array = data.split(",");    this.videoData = array[0];    this.soundData = array[1];    //通知主板,CPU完成工作    this.getMediator().changed(this);  }}

顯卡

function VideoCard( mediator ) {  //持有一個調停者對象  this.mediator = mediator;  /**   * 獲取當前同事類對應的調停者對象   */  this.getMediator = function() {    return mediator;  }  /**   * 顯示視頻數據   */  this.showData = function(data){    console.log("正在播放的是:" + data);  }}

聲卡

function SoundCard( mediator ){  //持有一個調停者對象  this.mediator = mediator;  /**   * 獲取當前同事類對應的調停者對象   */  this.getMediator = function() {    return mediator;  }  /**   * 按照聲頻數據發出聲音   */  this.soundData = function(data){    console.log("輸出音頻:" + data);  }}

具體調停者類

function MainBoard() {  //需要知道要交互的同事類――光驅類  this.cdDriver = null;  //需要知道要交互的同事類――CPU類  this.cpu = null;  //需要知道要交互的同事類――顯卡類  this.videoCard = null;  //需要知道要交互的同事類――聲卡類  this.soundCard = null;  this.setCdDriver = function(cdDriver) {    this.cdDriver = cdDriver;  }  this.setCpu = function(cpu) {    this.cpu = cpu;  }  this.setVideoCard = function(videoCard) {    this.videoCard = videoCard;  }  this.setSoundCard = function(soundCard) {    this.soundCard = soundCard;  }  this.changed = function(c) {    if(c instanceof CDDriver){      //表示光驅讀取數據了      this.opeCDDriverReadData(c);    }else if(c instanceof CPU){      this.opeCPU(c);    }  }  /**   * 處理光驅讀取數據以后與其他對象的交互   */  this.opeCDDriverReadData = function(cd){    //先獲取光驅讀取的數據    var data = cd.getData();    //把這些數據傳遞給CPU進行處理    cpu.executeData(data);  }  /**   * 處理CPU處理完數據后與其他對象的交互   */  this.opeCPU = function(cpu){    //先獲取CPU處理后的數據    var videoData = cpu.getVideoData();    var soundData = cpu.getSoundData();    //把這些數據傳遞給顯卡和聲卡展示出來    this.videoCard.showData(videoData);    this.soundCard.soundData(soundData);  }}

客戶端

//創建調停者――主板var mediator = new MainBoard();//創建同事類var cd = new CDDriver(mediator);var cpu = new CPU(mediator);var vc = new VideoCard(mediator);var sc = new SoundCard(mediator);//讓調停者知道所有同事mediator.setCdDriver(cd);mediator.setCpu(cpu);mediator.setVideoCard(vc);mediator.setSoundCard(sc);//開始看電影,把光盤放入光驅,光驅開始讀盤 cd.readCD();

打印效果

調停者模式的優點

● 松散耦合:調停者模式通過把多個同事對象之間的交互封裝到調停者對象里面,從而使得同事對象之間松散耦合,基本上可以做到互補依賴。這樣一來,同事對象就可以獨立地變化和復用,而不再像以前那樣“牽一處而動全身”了。
● 集中控制交互:多個同事對象的交互,被封裝在調停者對象里面集中管理,使得這些交互行為發生變化的時候,只需要修改調停者對象就可以了,當然如果是已經做好的系統,那么就擴展調停者對象,而各個同事類不需要做修改。
● 多對多變成一對多:沒有使用調停者模式的時候,同事對象之間的關系通常是多對多的,引入調停者對象以后,調停者對象和同事對象的關系通常變成雙向的一對多,這會讓對象的關系更容易理解和實現。

調停者模式的缺點

調停者模式的一個潛在缺點是,過度集中化。如果同事對象的交互非常多,而且比較復雜,當這些復雜性全部集中到調停者的時候,會導致調停者對象變得十分復雜,而且難于管理和維護。

更多關于JavaScript相關內容可查看本站專題:《javascript面向對象入門教程》、《JavaScript切換特效與技巧總結》、《JavaScript查找算法技巧總結》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript數學運算用法總結

希望本文所述對大家JavaScript程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品自拍偷拍| 亚洲黄色成人网| 精品动漫一区二区三区| 国产一区二区三区网站| 精品少妇一区二区30p| 97碰在线观看| 在线日韩第一页| 亚洲人成免费电影| 成人黄色免费片| 精品视频久久久久久久| 久久久久久亚洲精品| 性欧美亚洲xxxx乳在线观看| 国产日韩换脸av一区在线观看| 亚洲精品丝袜日韩| 国产拍精品一二三| 久久视频在线免费观看| 成人夜晚看av| 日韩av免费在线看| 精品久久久999| 亚洲精品久久久久中文字幕欢迎你| 在线免费观看羞羞视频一区二区| 欧美激情一区二区三区成人| 国产精品日韩一区| 国内精品伊人久久| 亚洲综合视频1区| 成人精品一区二区三区| 欧美成人剧情片在线观看| 另类视频在线观看| 日韩美女中文字幕| 精品国产网站地址| 欧美极度另类性三渗透| 久久成人精品电影| 国产999精品久久久| 91超碰中文字幕久久精品| 欧美午夜视频一区二区| 国产丝袜一区二区三区| 中文字幕亚洲一区| 欧美裸体男粗大视频在线观看| 欧美激情精品在线| 亚洲国产精品99| 91日本在线观看| 欧美激情网友自拍| www亚洲欧美| 91精品国产自产91精品| 国产精品第二页| 成人午夜激情网| 国产精品视频永久免费播放| 亚洲欧美成人精品| 亚洲成人久久电影| 欧美精品九九久久| 色综合久久悠悠| 亚洲欧美国产日韩天堂区| 91精品国产免费久久久久久| 中文字幕亚洲激情| 欧美风情在线观看| 免费99精品国产自在在线| 中文字幕久热精品视频在线| 国产成人精品电影久久久| 亚洲国产精品久久久| 亚洲国产福利在线| 亚洲欧美国产精品专区久久| 亚洲人午夜精品免费| 欧美性猛交xxxx免费看久久久| 日韩精品免费一线在线观看| 91精品国产高清自在线| 国产精品欧美日韩一区二区| 亚洲va久久久噜噜噜久久天堂| 久久九九免费视频| 在线播放国产一区二区三区| 欧美成人中文字幕| 日韩精品视频在线播放| 91精品国产91久久久久久久久| 国产精品久久久久久久电影| 国产99久久精品一区二区 夜夜躁日日躁| 亚洲伊人久久综合| 92看片淫黄大片看国产片| 日韩电影免费观看中文字幕| 欧美综合激情网| 欧美在线不卡区| 成人a免费视频| 亚洲欧美激情另类校园| 成人网欧美在线视频| www.99久久热国产日韩欧美.com| 久久综合伊人77777| 国产精品十八以下禁看| 久久久久久久av| 国产亚洲精品激情久久| 久热在线中文字幕色999舞| 亚洲欧美999| 亚洲国产古装精品网站| 91国自产精品中文字幕亚洲| 欧美精品videos| 91久久久亚洲精品| 亚洲欧美自拍一区| 欧美精品久久久久a| 久久伊人精品一区二区三区| 亚洲人线精品午夜| 国产精品激情av在线播放| 久久亚洲国产精品| 一区二区三区无码高清视频| 欧美成人性生活| 亚洲人成电影网站色…| 久久精品国产69国产精品亚洲| 成人h猎奇视频网站| 中文字幕日韩高清| 日韩av在线网站| 国产精品久久久久福利| 国产精品久久久久久久7电影| 97视频网站入口| 久久久久国产视频| 日本精品免费观看| 欧美在线视频观看| 欧美性猛交xxxx免费看漫画| 久久亚洲国产精品成人av秋霞| 国精产品一区一区三区有限在线| 亚洲第一二三四五区| 欧美日韩国产在线看| 欧美高清在线视频观看不卡| 欧美性色19p| 精品欧美aⅴ在线网站| 久久精品夜夜夜夜夜久久| 久久99久久亚洲国产| 欧美国产日韩一区| 欧美夜福利tv在线| 久久五月天综合| 国产91精品久久久久| 97av在线播放| 青草热久免费精品视频| 91av在线看| 日韩av在线免费看| 国产婷婷色综合av蜜臀av| 亚洲在线一区二区| 欧美电影第一页| 高清欧美一区二区三区| 国产精品永久免费视频| 2019中文字幕在线观看| 色狠狠久久aa北条麻妃| 俺去啦;欧美日韩| 成人a免费视频| 欧美日韩加勒比精品一区| 一区二区在线视频播放| 影音先锋日韩有码| 亚洲第一福利视频| 欧美性猛交xxxx免费看漫画| 国产成人在线一区二区| 日韩中文字幕视频| 欧美性生活大片免费观看网址| 爽爽爽爽爽爽爽成人免费观看| 亚洲天堂av在线免费观看| 九色成人免费视频| 色妞色视频一区二区三区四区| 亚洲激情在线观看视频免费| 国产一区二区三区精品久久久| 日韩电影大全免费观看2023年上| 国产精品偷伦一区二区| 精品国产91久久久久久老师| 国产成人av在线播放| 日韩欧美在线视频日韩欧美在线视频| 亚洲国产精品久久精品怡红院| 国产成人精品优优av| 91欧美视频网站| 亚洲天堂男人天堂女人天堂| 成人国产精品一区二区| 国产精品自拍偷拍|