代理模式的作用是:為其他物件提供一種代理以控制對這個物件的存取。
在某些情況下,一個客戶不想或不能直接引用另一個對象,而代理對象可以在客戶端和目標對象之間起到中介的作用。
抽象角色:宣告真實物件和代理物件的共同介面。
代理角色:代理對象角色內部含有對真實對象的引用,從而可以操作真實對象,同時代理對象提供與真實對象相同的接口以便在任何時刻都能夠代替真實對象。同時,代理物件可以在執行真實物件操作時,附加其他的操作,相當於對真實物件進行封裝。
真實角色:代理角色所代表的真實對象,是我們最終要引用的對象。
例證:以下程式使用靜態代理實作一個大寫字母的轉換功能。
介面類別ISomeService:
package com.ietree.basicskill.designpattern.staticproxy;/** * 接口类 * * @author Root */public interface ISomeService { String doFirst(); void doSecond(); }
實作類別SomeServiceImpl:
package com.ietree.basicskill.designpattern.staticproxy;/** * 实现类 * * @author Root */public class SomeServiceImpl implements ISomeService { @Overridepublic String doFirst() { System.out.println("执行doFirst()..."); String result = "abcde";return result; } @Overridepublic void doSecond() { System.out.println("执行doSecond()..."); } }
代理類別SomeServiceProxy:
SomeServiceProxy =
測試類別Main:
package com.ietree.basicskill.designpattern.staticproxy;public class Main {public static void main(String[] args) { ISomeService service = new SomeServiceProxy();String result = service.doFirst(); System.out.println(result); service.doSecond(); } }
如果要按照上述的方式(靜態代理)使用代理模式,那麼真實角色必須是實作已經存在的,並將其作為代理物件的內部屬性。
但是實際使用時,一個真實角色必須對應一個代理角色,但如果大量使用會導致類別的急劇膨脹;此外,如果事先並不知道真實角色,該如何使用代理呢?這個問題可以透過Java的動態代理類別來解決。
以上是設計模式之代理模式的作用的詳細內容。更多資訊請關注PHP中文網其他相關文章!