設計模式-代理模式(一)
設計模式-代理模式(一)
從出社會開始,因緣際會的讀了一本深入淺出設計模式(用Java實踐的),當時就覺得設計模式很有趣,索幸用C++把裡面的範例都實踐了一遍,最近因為開始SSM的練習,為了了解Mybatis,想從裡面的設計模式開始著手導讀,知道裡面用了動態代理的模式,但這邊先不談動態代理,而是想先從簡單的靜態代理開始,在下一篇才會繼續深度探索Mybatis的動態代理怎麼實踐的,這邊就先拿靜態代理的設計模式來練練手吧。
UML與程式碼
首先我們定義一下Interface
1 | public interface Subject { |
接著我們來定義目標對象以及代理對象
1 | public class RealSubject implements Subject{ |
1 | public class Proxy implements Subject{ |
接著我們呼叫這個代理對象去實踐
1 | public class Main { |
輸出結果自然就是
1 | Proxy do Action start |
優點以及缺點
代理模式的優點可以從上列發現,我們可以在Proxy的物件裡面做前處理,而不用針對RealSubject去做更改,也可以在RealSubject做完它的職責之後,再去做其他的處理。簡單來說我們可以把主要邏輯跟次要邏輯切開,RealSubject是我們的主要邏輯,次用邏輯可能是我們Proxy裡面的一些共用邏輯,例如我們在Mybatis需要先啟動JDBC的驅動,接著建立Connection,但中間的SQL語法可能不同,這時候我們就將相關的SQL語法放到RealSubject去做,之後我們對結果進行處理,並且關閉Connection。那麼其實透過這樣的方式,我們可以將變動的執行代碼抽出來,以達到解耦的效果。