代理(Proxy)是一種設計模式,提供了對目標物件另外的存取方式;即透過代理物件存取目標物件.這樣做的好處是:可以在目標物件實現的基礎上,增強額外的功能操作,即擴展目標物件的功能.
這裡使用到程式設計中的一個想法:不要隨意去修改別人已經寫好的程式碼或方法,如果需改修改,可以透過代理的方式來擴展該方法
舉個例子來說明代理的作用:假設我們想邀請一位明星,那麼並不是直接連接明星,而是聯繫明星的經紀人,來達到同樣的目的.明星就是一個目標對象,他只要負責活動中的節目,而其他瑣碎的事情就交給他的代理人(經紀人)來解決.這就是代理思想在現實中的一個例子
代理模式的關鍵點是:代理物件與目標物件.代理物件是對目標物件的擴充,並且會呼叫目標物件
靜態代理
靜態代理在使用時,需要定義介面或父類別,被代理物件與代理物件一起實作相同的介面或是繼承相同父類別.
下面舉個案例來解釋:
模擬保存動作,定義一個保存動作的接口:IUserDao.java,然後目標對象實現這個接口的方法UserDao.java,此時如果使用靜態代理方式,就需要在代理對象(UserDaoProxy.java)中也實現IUserDao接口.呼叫的時候透過呼叫代理物件的方法來呼叫目標物件.
要注意的是,代理物件與目標物件要實作相同的介面,然後透過呼叫相同的方法來呼叫目標物件的方法
靜態代理總結:
#1.可以做到在不修改目標物件的功能前提下,對目標功能擴展.
因為代理物件需要與目標物件實現一樣的介面,所以會有很多代理類別,類別太多.同時,一旦介面增加方法,目標物件與代理物件都要維護.
#如何解決靜態代理程式中的缺點呢?答案是可以使用動態代理方式動態代理
#動態代理程式有以下特點:##1.代理物件,不需要實作介面2.代理物件的產生,是利用JDK的API,動態的在記憶體中建構代理物件(需要我們指定建立代理物件/目標物件實現的介面的型別)
3.動態代理也叫做:JDK代理程式,介面代理
總結:
以上是java中什麼是代理模式的詳細內容。更多資訊請關注PHP中文網其他相關文章!