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

首頁 > 編程 > JavaScript > 正文

javascript設計模式之中介者模式Mediator

2019-11-20 13:33:09
字體:
來源:轉載
供稿:網友

一,總體概要

1,筆者淺談

我們從日常的生活中打個簡單的比方,我們去房屋中介租房,房屋中介人在租房者和房東出租者之間形成一條中介。租房者并不關心他租誰的房。房東出租者也不關心他租給誰。因為有中介的存在,這場交易才變得如此方便。

在軟件的開發過程中,勢必會碰到這樣一種情況,多個類或多個子系統相互交互,而且交互很繁瑣,導致每個類都必須知道他需要交互的類,這樣它們的耦合會顯得異常厲害。牽一發而動全身,后果很嚴重,大熊很生氣!~~~~(>_<)~~~~

好了,既然問題提出來了,那有請我們這期的主角------中介者模式出場吧

中介者的功能就是封裝對象之間的交互。如果一個對象的操作會引起其他相關對象的變化,而這個對象又不希望自己來處理這些關系,那么就可以去找中介者,讓它來處理這些麻煩的關系。看下面的小例子:

復制代碼 代碼如下:

var Participant = function(name) {
    this.name = name;
    this.chatroom = null;
};
Participant.prototype = {
    send: function(message, to) {
        this.chatroom.send(message, this, to);
    },
    receive: function(message, from) {
        log.add(from.name + " to " + this.name + ": " + message);
    }
};
var Chatroom = function() {
    var participants = {};
    return {
        register: function(participant) {
            participants[participant.name] = participant;
            participant.chatroom = this;
        },
        send: function(message, from, to) {
            if (to) {                  
                to.receive(message, from);   
            } else {                    
                for (key in participants) {  
                    if (participants[key] !== from) {
                        participants[key].receive(message, from);
                    }
                }
            }
        }
    };
};
var log = (function() {
    var log = "";
    return {
        add: function(msg) { log += msg + "/n"; },
        show: function() { alert(log); log = ""; }
    }
})();
function run() {
    var yoko = new Participant("Yoko");
    var john = new Participant("John");
    var paul = new Participant("Paul");
    var ringo = new Participant("Ringo");
    var chatroom = new Chatroom();
    chatroom.register(yoko);
    chatroom.register(john);
    chatroom.register(paul);
    chatroom.register(ringo);
    yoko.send("All you need is love.");
    yoko.send("I love you John.");
    john.send("Hey, no need to broadcast", yoko);
    paul.send("Ha, I heard that!");
    ringo.send("Paul, what do you think?", paul);
    log.show();
}

在示例代碼中我們有四個參與者,加入聊天會話通過注冊一個聊天室(中介)。每個參與者的參與對象的代表。參與者相互發送消息和聊天室的處理路由。

這里的聊天室對象就起到了中介的作用,協調其他的對象,進行合理的組織,降低耦合。

二,源碼案例參考

我們應該很熟悉MVC三層模型實體模型(Model)、視圖表現層(View)還有控制層(Control/Mediator)。

控制層便是位于表現層與模型層之間的中介者?;\統地說MVC也算是中介者模式在框架設計中的一個應用。

三,案例引入

復制代碼 代碼如下:

function Player(name) {
    this.points = 0;
    this.name = name;
}
Player.prototype.play = function () {
    this.points += 1;
    mediator.played();
};
var scoreboard = {
    element:document.getElementById('results'),
    update:function (score) {
        var i, msg = '';
        for (i in score) {
            if (score.hasOwnProperty(i)) {
                msg += '<p><strong>' + i + '<//strong>: ';
                msg += score[i];
                msg += '<//p>';
            }
        }
        this.element.innerHTML = msg;
    }
};
var mediator = {
    players:{},
    setup:function () {
        var players = this.players;
        players.home = new Player('Home');
        players.guest = new Player('Guest');
    },
    played:function () {
        var players = this.players,
                score = {
                    Home:players.home.points,
                    Guest:players.guest.points
                };
        scoreboard.update(score);
    },
    keypress:function (e) {
        e = e || window.event;
        if (e.which === 49) {
            mediator.players.home.play();
            return;
        }
        if (e.which === 48) {
            mediator.players.guest.play();
            return;
        }
    }
};
mediator.setup();
window.onkeypress = mediator.keypress;
setTimeout(function () {
    window.onkeypress = null;
    console.log('Game over!');
}, 30000);

四,總結一下

Why Mediator ?

各個對象之間的交互操作非常多,每個對象的行為操作都依賴彼此對方,修改一個對象的行為,同時會涉及到修改很多其他對象的行為,

如果使用Mediator模式,可以使各個對象間的耦合松散,只需關心和 Mediator的關系,使多對多的關系變成了一對多的關系,

可以降低系統的復雜性,提高可修改擴展性。

使用中介者模式的場合

1.一組定義良好的對象,現在要進行復雜的通信。

2.定制一個分布在多個類中的行為,而又不想生成太多的子類。

可以看出,中介對象主要是用來封裝行為的,行為的參與者就是那些對象,但是通過中介者,這些對象不用相互知道。(迪米特法則的具體實現)

使用中介者模式的優點:

1.降低了系統對象之間的耦合性,使得對象易于獨立的被復用。

2.提高系統的靈活性,使得系統易于擴展和維護。

使用中介者模式的缺點:

中介者模式的缺點是顯而易見的,因為這個“中介“承擔了較多的責任,所以一旦這個中介對象出現了問題,那么整個系統就會受到重大的影響。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美日韩中文在线制服| 在线播放日韩欧美| 亚洲女性裸体视频| 亚洲欧美日韩在线高清直播| 亚洲综合精品伊人久久| 欧美日韩精品在线播放| 欧美电影在线播放| 欧美性理论片在线观看片免费| 91av视频在线免费观看| 日韩欧美国产视频| 欧美一级视频在线观看| 日韩毛片在线观看| 日韩免费在线电影| 国产亚洲精品日韩| 精品久久久久久久久久久久久久| 欧美国产亚洲精品久久久8v| 欧美精品电影免费在线观看| 久久免费国产视频| 国产精品免费看久久久香蕉| 中文字幕欧美日韩| 青青青国产精品一区二区| 全亚洲最色的网站在线观看| 亚洲国产高清自拍| 精品欧美一区二区三区| 日韩成人中文字幕| 亚洲国产日韩欧美在线动漫| 欧美韩国理论所午夜片917电影| 国产精品影片在线观看| 欧美激情精品久久久久久黑人| 日韩欧美亚洲成人| 国内精品久久久久久| 国产精品香蕉国产| 精品一区二区亚洲| 欧美精品在线观看91| 亚洲第一精品福利| 97国产真实伦对白精彩视频8| 性金发美女69hd大尺寸| 亚洲成年网站在线观看| 川上优av一区二区线观看| 久久久精品在线| 韩国三级电影久久久久久| 欧美激情在线有限公司| 日韩免费在线看| 久久久国产成人精品| www.亚洲免费视频| 亚洲第一中文字幕在线观看| 色综合老司机第九色激情| 欧美视频一区二区三区…| 亚洲精品97久久| 日韩福利视频在线观看| 国产中文字幕日韩| 欧美在线免费视频| 成人中文字幕+乱码+中文字幕| 欧美日韩高清在线观看| 欧美韩日一区二区| 久久久亚洲精品视频| 欧美色另类天堂2015| 国产精品日韩一区| 亚洲综合成人婷婷小说| 久久久精品视频成人| 正在播放国产一区| 欧美性生交大片免费| 国产v综合ⅴ日韩v欧美大片| 日韩最新中文字幕电影免费看| 久久久91精品国产| 久久噜噜噜精品国产亚洲综合| 日韩在线视频免费观看高清中文| 亚洲新声在线观看| 国产精品视频26uuu| 97不卡在线视频| 亚洲天堂一区二区三区| 日韩一区二区三区在线播放| 国产精品一区二区久久国产| 日韩电影大全免费观看2023年上| 欧美小视频在线| 中文字幕免费国产精品| 亚洲va欧美va国产综合久久| 亚洲一区亚洲二区亚洲三区| 亚洲精品电影网在线观看| 成人黄色av网站| 国产成人亚洲综合91| 在线播放国产精品| 亚洲女性裸体视频| 国产精品一区二区三区成人| 91欧美激情另类亚洲| 深夜精品寂寞黄网站在线观看| 在线日韩日本国产亚洲| 国产一区二区三区在线免费观看| 国产性色av一区二区| 高清在线视频日韩欧美| 5566成人精品视频免费| 欧美日韩免费一区| 精品国产91久久久久久老师| 欧美老少做受xxxx高潮| 国产成人精品日本亚洲| 国产mv免费观看入口亚洲| 成人av.网址在线网站| 国语自产在线不卡| 午夜欧美大片免费观看| 国产成人精品在线视频| 国产一区二区三区四区福利| 欧美日韩一区二区三区在线免费观看| 国产网站欧美日韩免费精品在线观看| 亚洲成人教育av| 精品小视频在线| 色阁综合伊人av| 亚洲春色另类小说| 亚洲欧美综合精品久久成人| 国产在线拍揄自揄视频不卡99| 亚洲天堂av在线免费观看| 国产精品九九久久久久久久| 欧美激情一区二区久久久| 亚洲国产第一页| 久久人人爽亚洲精品天堂| 久久免费少妇高潮久久精品99| 国产精品亚洲综合天堂夜夜| 亚洲美腿欧美激情另类| 怡红院精品视频| 最新日韩中文字幕| 成人免费在线视频网站| 欧美国产日韩一区二区在线观看| 国产精品视频地址| 欧美又大粗又爽又黄大片视频| 欧美日韩国产限制| 日本道色综合久久影院| 久久国产精品久久国产精品| 久久好看免费视频| 亚洲国产精品悠悠久久琪琪| 欧美黑人国产人伦爽爽爽| 日韩在线视频网站| 在线国产精品播放| 亚洲国产精品电影| 久久精品国产一区| 日韩成人在线播放| 久久久精品久久久| 日本久久91av| 丝袜美腿亚洲一区二区| 欧美日韩中文字幕日韩欧美| 亚洲成人网在线观看| 日韩在线观看免费全集电视剧网站| 欧美一级电影免费在线观看| 欧美电影在线观看高清| 欧美日本国产在线| 91av在线看| 国产福利精品在线| 久久亚洲欧美日韩精品专区| 热99在线视频| 国产精品电影久久久久电影网| 久国内精品在线| 日韩精品免费观看| 久久久久国产视频| 91精品国产九九九久久久亚洲| 精品久久久久久久久中文字幕| 久久免费视频在线| 一区二区中文字幕| 国产亚洲欧美aaaa| 在线观看欧美日韩| 日本韩国在线不卡| 欧美成人免费va影院高清| 亚洲成人免费在线视频| 亚洲最大福利视频| 久久免费少妇高潮久久精品99| 午夜精品久久久久久99热| 91网在线免费观看|