代理模式是我們寫代碼過程中經常使用的模式,可以分爲靜態代理和動態代理。其通常由兩部分構成,即代理類和委託類,他們對外暴露同樣的業務方法(即實現相同的接口)。委託類是實際進行業務操作的類,代理類中會封裝一個委託類實例,對業務方法的處理就是轉調委託類實例相應方法。實際使用中,用戶得到的是代理類實例,那爲什麼要在委託類上封裝一層呢?我們先看一個實際生活的例子吧。下面以租房的例子來給大家介紹下靜態代理。
舉個例子,比如房東需要出租房子,但是房東比較忙,沒有時間浪費在出租房屋上,這個時候他可以把租房的權利代理給中介,這時候中介就具有了出租房屋的權利。下面來用java代碼實現這個簡單案例.
首先我們創建一個接口。如下圖
第二步, 創建房東類並實現服務接口Rent.
小編是一個有着5年工作經驗的java程序員,對於java,自己有做資料的整合,一個完整學習java的路線,學習資料和工具,相信這裏有很多學習java的小夥伴,我創立了一個2000人學習扣羣,479121291。每晚都有java的直播課程。無論是初級還是進階的小夥伴小編我都歡迎!
第三步:創建房東的代理類:中介,也實現服務接口。
在這個類裏面我們在添加一些其他的業務方法。
好了,最後我們寫個main方法來測試下。如下:
執行結果如下
通過這個小案例我們可以發現靜態代理的有點在於:
業務類只需要關注業務邏輯本身,保證了業務類的重用性。這是代理的共有優點。不過靜態代理也有缺點,如下:
缺點: 代理對象的一個接口只服務於一種類型的對象,如果要代理的方法很多,勢必要爲每一種方法都進行代理,靜態代理在程序規模稍大時就無法勝任了。