您好,登錄后才能下訂單哦!
首先來了解一下什么是代理模式?
所謂代理模式就是對象通過代理來控制對真實對象的訪問.
舉個生活中的例子,我們日常購物不會直接去聯系廠家購買,而是通過網上商城,線下超市等形式間接的購買.那么這些商城或者說超市就是就是我們的代理.我們的代理會去聯系廠家,幫我們代購商品.
設計模式包含一下三大核心模塊:
Subject (抽象主題角色):它是一個真實主題和代理主題都要實現的一個抽象接口.這樣在調用真實主題的地方都可以用代理主題.
Proxy(代理主題):我們的主角,它包含了對真實主題的引用,從而可以隨意的操作真實主題對象,在需要的時候創建和刪除真實的對象.而且代理主題提供了和真實主題相同的接口,以便替代真實的主題.代理主題往往還會執行更多的操作,比如在調用真實主題操作之前進行安全性校驗,在執行真實主題的調用后,執行日志處理等等.
RealProject(真是主題):這是一個傲嬌的小公主輕易不與外界接觸,一切事宜都交給管家(Proxy)來處理.
代理模式的優點和缺點:
1. 能夠協調調用者和被調用者,在一定程度上降低了系統的耦合度。
2. 客戶端可以針對抽象主題角色進行編程,增加和更換代理類無須修改源代碼,符合開閉原則,系統具有較好的靈活性和可擴展性。
缺點:就是實現代理功能,增加了額外的工作量.
下面通過簡單的案例來了解下代理模式的具體實現:
真實主題和代理主題都要實現的接口
public interface IBuy{ void buy(); }
定義真實主題類
public class RealBuyer implements IBuy{ @Override public void buy(){ System.out.println("餓死了,我想吃蛋撻了"); } }
定義代理主題
public class ProxyBuyer implements IBuy{ private RealBuy realBuy = null; @Override public void buy(){ if(this.isEggTart()){ //是蛋撻 realBuy = new RealBuy(); realBuy.buy(); //買 this.recordHistory();//收藏一下 } } //檢查是否是吃的 public boolean isEggTart(){ System.out.println("如果是蛋撻我就吃,不是我就不買!"); return true; } //買完了記錄到我的購買記錄中,以便日后在來一單 public void recordHistory(){ System.out.println("親,這是你最喜歡的蛋撻,要不要再來一單?"); } }
客戶端調用:
public class Main{ public static void main(String[] args){ IBuy buyer = new ProxyBuyer(); buyer.buy(); } }
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。