1.代理模式的介紹
代理模式是java中常見,也是重要的一種模式,好比spring中的aop就是代理模式的一種應用。
那麼代理模式究竟有什麼做用?代理模式就是「控制和管理對象的訪問」。相對於簡單粗暴地直接訪問對象、調用對象的方法,使用代理模式能夠在對象的使用時,進行預處理和過後處理等。好比權限控制、日誌記錄。固然你能夠直接在對象裏,作這些操做,可是這樣耦合性過高,不利於代碼的維護。java
2.如何使用代理模式
一個實現代理模式的demo,主要須要3個類spring
1)委託類接口ide
//委託類接口 public interface TestService { void business(); }
2)委託類的實現測試
//委託類的實現類 public class TestImplement implements TestService{ @Override public void business() { System.out.println("do the busniess"); } }
3)代理類this
//委託類的代理類,注意須要implements 委託類 public class StaticProxy implements TestService{ private TestService testService; public StaticProxy(TestService testService) { this.testService = testService; } @Override public void business() { //能夠作一些預處理,好比數據處理、權限控制等 System.out.println("before invoke,I can do something."); testService.business(); //能夠作一些過後處理,好比執行結果的記錄,事務提交等 System.out.println("before invoke,I can do something."); } }
測試方法:代理
TestService service = new TestImplement(); StaticProxy proxy = new StaticProxy(service); proxy.business();
測試輸出結果:
before invoke,I can do something.
do the busniess
before invoke,I can do something.日誌
以上就是代理的簡單的一種實現,咱們也叫靜態代理。由於這樣的實現方式,須要爲每一個委託類都寫代理類,會產生大量的代理類,也不利於代碼的複用和項目的解耦,因此咱們會使用動態代理去解決這些問題。關於動態代理的詳細介紹會在下篇中繼續大話。code
這是本人對於代理模式的一些理解,十分歡迎你們的指教和討論。對象