>>版權聲明:本文爲原創文章,請不要拷貝轉載。微信
1.比較函數
(適配器模式)3d
(橋接模式)代理
(裝飾器模式)對象
(代理模式)blog
把這四個模式放在一塊兒感受至關微妙。籠統的講,它們都彷佛是間接引用real object,是對real object的封裝,接口與實現的分離。繼承
他們之間的區別是很微妙的,尤爲是適配器和橋接之間,裝飾器和代理之間的區別。接口
適配器和橋接之間幾乎沒有區別,只能說他們出發點,目的,解決的問題不一樣。圖片
適配器:適配器的目的是將一種現存的已實現接口轉換成調用者須要的接口。調用者須要的接口是固定的,已存在的。實際調用的接口以及它的實現也是固定的,已存在的。如今要把二者關聯上。支付寶
橋接:橋接的目的是分離抽象與具體實現,使它們不直接繼承。使用橋接模式的時候,項目纔剛搭建,不存在具體的實現。橋接是主動爲之,橋接創造了接口與實現分離,適配器偏偏想要彌合這種分離的狀態。
因此從類圖和最終的代碼實現上是看不出實際的區別的。
裝飾器和代理之間的區別很細微,看了不少人的解釋,都沒法自圓其說。有一個比較合理的說法,即裝飾器是代理的一個子集。
裝飾器:裝飾器的目的是保存接口不變的狀況下,在現有實現的基礎上添加功能。裝飾器模式下,real object是做爲構造函數的參數傳入的,以此來實現運行時對real object動態添加功能。
代理:代理的目的是提供一個代理來控制調用者調用。代理模式存在兩種狀況,一種是預先內置了一個real object對象,這種狀況下在編譯時就肯定了效果;另外一種是經過構造函數的參數傳入real object,這種狀況就很是相似裝飾器了。
實際運用當中,其實沒有必要區分的那麼清楚。我想咱們仍是應該遵循從目的出發,選擇合適的模式解決當前的問題。
注:圖片來自維基百科
喜歡的話能夠打賞一下哦!!!
支付寶
微信