結構型:代理模式 Vs 介面卡模式 Vs 門面模式(外觀模式)

weixin_34262482發表於2014-03-30

先上UML圖

代理模式:

s1

介面卡模式:

s2

門面模式(外觀模式):

s3

打了例子……呃……舉個比方

代理模式: 水滸街,西門慶看上潘金蓮,想和她嘿咻嘿咻,但是自己有不能去找潘金蓮去說,於是他找到了金牌代理人王婆,王婆就去找潘金蓮,經過一番商談,潘金蓮終於答應了西門慶的請求。 

介面卡模式: 水滸街,西門慶看上潘金蓮,想和她嘿咻嘿咻,於是就去潘金蓮家,但是潘金蓮不在,於是就給王婆穿上潘金蓮的衣服,帶上面具,假扮成潘金蓮,和西門慶嘿咻嘿咻了……(有點噁心啊) 

門面模式(外觀模式): 水滸街,西門慶想去怡紅院嘿咻嘿咻,於是他選好了姑娘,調好了門房,嘿咻之後交完了錢,由退了房。現在怡紅院推出門面套餐,只要選門面套餐,就自動選好了最好的房子,最好的姑娘,連房租都可以自動記載賬上,西門慶只要嘿咻就可以了。

優缺點

代理模式:優點是協調呼叫與被呼叫,實現部分解耦,代理模式能保護對真實物件的訪問,代理遠端機器可以使得遠端機器能無阻礙協調地處理客服端請求。缺點是增加代理層呼叫流程複雜,可能出錯,同時速度可能變慢。 用例子說明是:優點將西門慶與潘金蓮隔離開來,保護了潘金蓮的名聲,同時使西門慶與潘金蓮交流順暢。缺點是多了王婆這一層,傳達交流可能會出錯,同時要肯定會延遲兩人的交流。 

介面卡模式:優點是將目標類與適配者類解耦,增加了類的透明性,靈活性擴充套件性好。缺點是在Java等語言中,不支援多繼承,所以類介面卡只能適配一個,而物件介面卡想置換適配類的方法就不容易。 用例子來說:優點是西門慶知道那是王婆假扮的,而且他能隨時讓王婆假扮成其他人,靈活性好。缺點是在Java中,類介面卡中王婆只能假扮一個姑娘,而物件介面卡中王婆假扮的姑娘取樂方式只有嘿咻嘿咻。 

門面模式(外觀模式):優點是鬆散耦合,被調模組更容易擴充套件和維護。簡單易用,節省了呼叫者的處理流程,更好的劃分了訪問層次,而且使用者不知道內部實現,還提高了安全性。缺點是不符合開閉原則,如果要新增功能,繼承複用都沒有用,只能修改門面模組程式碼。 用例子來說:優點是西門慶叫姑娘時簡單容易,而且選姑娘、選房子、記賬可以統籌規劃,專門找人負責,各人之間互不相關,西門慶也不知道門面套餐內部機制,怡紅院也掙錢也更隱蔽。缺點是有新的流程,都必須修改門面套餐。

適用範圍

代理模式:可以用於遠端訪問,虛擬代理,以及許可權控制,智過能引用代理等。 

介面卡模式:當系統的資料與行為都正確,但是介面不符合時,可以通適配達到協調 

門面模式:開發時通過門面模式可以隱藏複雜的實現步驟,維護舊系統的時候,可以封裝遺留程式碼,提供清晰藉口。

 

代理模式 Vs 介面卡模式

代理模式是把當前的行為或功能委託給其他物件執行,代理類負責介面限定:是否可以呼叫真實角色,以及是否對傳送到真實角色的訊息進行變形處理,它不對被主題角色(也就是被代理類)的功能做任何處理,保證原汁原味的呼叫。代理模式使用到極致開發就是AOP,這是各位採用Spring架構開發必然要使用到的技術,它就是使用了代理和反射的技術。
裝飾模式是在要保證介面不變的情況下加強類的功能,它保證的是被修飾的物件功能比原始物件豐富(當然,也可以減弱),但不做准入條件判斷和准入引數過濾,如是否可以執行類的功能,過濾輸入引數是否合規等,這不是裝飾模式關心的。

相關文章