第74章

bookmark

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

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

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

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

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

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

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

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

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

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

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

第113章第166章第53章第75章第84章第205章第118章第53章第102章第93章第25章第60章第47章第27章第186章第147章第3章第170章第218章第118章第154章第46章第151章第204章第180章第22章第25章第65章第41章第141章第120章第126章第77章第29章第144章第86章第51章第216章第178章第58章第165章第82章第61章第72章第122章第106章第70章第215章第49章第137章第74章第153章第72章第50章第121章第21章第17章第106章第55章第147章第134章第76章第169章第137章第213章第206章第12章第75章第86章第72章第189章第96章第68章第130章第180章第48章第209章第56章第150章第154章第102章第171章第161章第124章第40章第85章第93章第205章第173章第160章第180章第146章第142章第94章第193章第34章第173章第134章第209章
第113章第166章第53章第75章第84章第205章第118章第53章第102章第93章第25章第60章第47章第27章第186章第147章第3章第170章第218章第118章第154章第46章第151章第204章第180章第22章第25章第65章第41章第141章第120章第126章第77章第29章第144章第86章第51章第216章第178章第58章第165章第82章第61章第72章第122章第106章第70章第215章第49章第137章第74章第153章第72章第50章第121章第21章第17章第106章第55章第147章第134章第76章第169章第137章第213章第206章第12章第75章第86章第72章第189章第96章第68章第130章第180章第48章第209章第56章第150章第154章第102章第171章第161章第124章第40章第85章第93章第205章第173章第160章第180章第146章第142章第94章第193章第34章第173章第134章第209章