免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
GoF設(shè)計(jì)模式之十七 Mediator- -

 

                                      

    C5) Mediator(中介模式)
    定義:定義一個(gè)封裝了一系列對(duì)象如何相互作用的對(duì)象。中介模式通過防止這些對(duì)象對(duì)彼此明確的涉及來獲得松散的耦合,讓你可以獨(dú)立的改變他們的相互作用。
    從定義就能理解這個(gè)模式的含義了,這是一個(gè)很有趣的模式,不過實(shí)際中運(yùn)用的機(jī)會(huì)不太多。假設(shè)一個(gè)項(xiàng)目,3個(gè)人寫業(yè)務(wù)邏輯,2個(gè)人做客戶界面,2個(gè)人負(fù)責(zé)測(cè)試,那么組長(zhǎng)就是一個(gè)中介。A完成一個(gè)程序P的邏輯部分,通知組長(zhǎng);組長(zhǎng)查看對(duì)應(yīng)的界面部分,如果B完成了,就通知C進(jìn)行測(cè)試;C發(fā)現(xiàn)有bug,通知組長(zhǎng),組長(zhǎng)轉(zhuǎn)告A、B進(jìn)行修正。如果B正好休息沒上班,那么組長(zhǎng)會(huì)安排E來進(jìn)行修正。A、B、C或者更多組員之間無需知道彼此的狀態(tài),甚至不用知道組里面還有誰(做過外包應(yīng)該有些了解的,幾個(gè)部門或者公司聯(lián)合開發(fā)時(shí)候就是這樣),任何變化都組員都不用知道,只用關(guān)心自己的工作并與組長(zhǎng)進(jìn)行溝通,相互協(xié)作的關(guān)系由組長(zhǎng)掌握。
    常有可能用到這個(gè)模式的一般是對(duì)界面對(duì)象的訪問設(shè)置,比如安裝一個(gè)多媒體軟件,有個(gè)下拉框,有幾種默認(rèn)設(shè)置:最小安裝、推薦安裝、全部安裝、用戶自定義,對(duì)應(yīng)設(shè)置:核心、視頻解碼插件、音頻解碼插件、視頻編碼插件、音頻編碼插件、視頻轉(zhuǎn)換工具、音頻轉(zhuǎn)換工具、皮膚(skin)。那么就這樣一個(gè)例子,用代碼來實(shí)現(xiàn)中介模式。
    public class setupMode {
        private Console console = getConsole();
        private String modeName;
        private boolean selected = false;
        public void select() {
            setSelected(true);
            console.selectMode(modeName);
        }
    }
    public class setupItem {
        private Console console = getConsole();
        private String itemName;
        private boolean checked = false;
        public void check() {
            setChecked(true);
            console.checkItem(itemName);
        }
    }
    public class Console {
        public void selectMode(String modeName) {
            setAllModeFalseExcept(modeName);
            if ("minMode".equals(modeName)) {
                items.setAllChecked(false);
                items.get("Core").setChecked(true);
                items.get("VideoDecode").setChecked(true);
                items.get("AudioDecode").setChecked(true);
            }else if ("commonMode".equals(modeName)) {
                items.setAllChecked(false);
                items.get("Core").setChecked(true);
                items.get("VideoDecode").setChecked(true);
                items.get("AudioDecode").setChecked(true);
                items.get("VideoTool").setChecked(true);
                items.get("AudioTool").setChecked(true);
            }else if ("maxMode".equals(modeName)) {
                items.setAllChecked(true);
            }else if ("customMode".equals(modeName)) {
                //do nothing
            }
        }
        public void checkItem(String itemName) {
            modes.get("customMode").setSelected(true);
            selectMode("customMode");
        }
    }

    這樣就可以由菜單控制選項(xiàng),同時(shí)選項(xiàng)也控制菜單,如果要添加菜單或者選項(xiàng),只需修改Console類,其他類沒有一點(diǎn)影響,如果不是用這種模式,修改的工作量與類的數(shù)量成正比。


本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
表單及表單域組件
javascript – Angular手表并不總是有效
設(shè)置或者的好CheckBoxList中的值
QT 按鈕4種樣式
Android之CheckBox進(jìn)行代碼設(shè)置setChecked(true)會(huì)觸發(fā)setOnCheckedChangeListener事件
了解 Web 服務(wù)規(guī)范: 第 4 部分:WS
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服