天天看小說

第74章

大B:“你是否還記得應用廣泛的MVC分爲哪三層?”

小A:“記得,模型層、表現層還有控制層。”

大B:“對,控制層便是位於表現層與模型層之間的中介者。籠統地說MVC也算是中介者模式在框架設計中的一個應用。由於中介者模式在定義上比較鬆散,在結構上和觀察者模式、命令模式十分相像;而應用目的又與結構模式‘門面模式’有些相似。”

小A:“他們有哪些地方相似?”

大B:“在結構上,中介者模式與觀察者模式、命令模式都添加了中間對象——只是中介者去掉了後兩者在行爲上的方向。因此中介者的應用可以仿照後兩者的例子去寫。但是觀察者模式、命令模式中的觀察者、命令都是被客戶所知的,具體哪個觀察者、命令的應用都是由客戶來指定的;而大多中介者角色對於客戶程序卻是透明的。當然造成這種區別的原因是由於它們要達到的目的不同。從目的上看,中介者模式與觀察者模式、命令模式便沒有了任何關係,倒是與前面講過的外觀模式有些相似。但是外觀模式是介於客戶程序與子系統之間的,而中介者模式是介於子系統與子系統之間的。這也註定了它們有很大的區別。”

小A:“他們都有什麼區別呢?”

大B:“外觀模式是將原有的複雜邏輯提取到一個統一的接口,簡化客戶對邏輯的使用。它是被客戶所感知的,而原有的複雜邏輯則被隱藏了起來。而中介者模式的加入並沒有改變客戶原有的使用習慣,它是隱藏在原有邏輯後面的,使得代碼邏輯更加清晰可用。”

小A:“使用中介者模式最大的好處是什麼?”

大B:“使用中介者模式最大的好處就是將同事角色解耦。這帶來了一系列的系統結構改善:提高了原有系統的可讀性、簡化原有系統的通信協議——將原有的多對多變爲一對多、提高了代碼的可複用性……但是中介者角色集中了太多的責任,所有有關的同事對象都要由它來控制。這不由得讓我想起了簡單工廠模式,但是由於中介者模式的特殊性——與業務邏輯密切相關,不能採用類似工廠方法模式的解決方法。因此建議在使用中介者模式的時候注意控制中介者角色的大校”

小A:“那什麼時候纔是中介者模式的使用時機?”

大B:“一組對象以定義良好但是複雜的方式進行通信,產生了混亂的依賴關係,也導致對象難以複用。中介者模式很容易在系統中應用,也很容易在系統中誤用。當系統出現了‘多對多’交互複雜的對象羣,不要急於使用中介者模式,而要先反思你的系統在設計上是不是合理。”

第222章第113章第177章第146章第89章第125章第86章第103章第81章第221章第178章第109章第168章第158章第141章第163章第131章第162章第206章第215章第129章第56章第213章第126章第170章第168章第223章第156章第22章第142章第47章第138章第196章第150章第218章第57章第93章第71章第205章第29章第171章第227章第74章第99章第207章第38章第110章第160章第97章第38章第93章第133章第72章第65章第8章第87章第60章第146章第70章第144章第37章第200章第105章第82章第114章第72章第168章第109章第215章第115章第203章第50章第59章第165章第223章第25章第219章第36章第109章第96章第73章第51章第143章第90章第131章第102章第112章第89章第86章第59章第150章第149章第97章第211章第51章第219章第167章第180章第224章
第222章第113章第177章第146章第89章第125章第86章第103章第81章第221章第178章第109章第168章第158章第141章第163章第131章第162章第206章第215章第129章第56章第213章第126章第170章第168章第223章第156章第22章第142章第47章第138章第196章第150章第218章第57章第93章第71章第205章第29章第171章第227章第74章第99章第207章第38章第110章第160章第97章第38章第93章第133章第72章第65章第8章第87章第60章第146章第70章第144章第37章第200章第105章第82章第114章第72章第168章第109章第215章第115章第203章第50章第59章第165章第223章第25章第219章第36章第109章第96章第73章第51章第143章第90章第131章第102章第112章第89章第86章第59章第150章第149章第97章第211章第51章第219章第167章第180章第224章
主站蜘蛛池模板: 饶河县| 卓资县| 尼木县| 平南县| 永仁县| 娱乐| 休宁县| 吉隆县| 顺义区| 安吉县| 高青县| 荔波县| 博客| 高淳县| 荣成市| 泰安市| 阿鲁科尔沁旗| 游戏| 缙云县| 漳州市| 仙游县| 建德市| 北宁市| 阿坝| 柯坪县| 德令哈市| 文水县| 阜平县| 巴塘县| 松溪县| 黄梅县| 依安县| 甘德县| 高安市| 黔东| 海伦市| 平昌县| 开平市| 光山县| 苏尼特右旗| 中西区|