現在在生活中,許多軟件系統都提供跨網絡和系統的應用,但在跨網絡和系統應用時,作為系統開發者並不希望客戶直接訪問系統中的對象。其中原因很多考慮到系統安全和性能因素,因素還有很多,也就不再進行一一的列舉了,所以,想到了在客戶端和系統端添加一層中間層----代理層,也是即將要介紹的代理模式。
首先,明確什么是代理模式,代理模式(Proxy)為另一個對象提供一個替身或占位符以控制對這個對象的訪問,其實用最簡單的方式來解釋代理模式,那就是中介,客戶不想直接引用對象,這個“中介”也就是代理對象就起到了一定的作用。
其次,就是代理模式的作用,就是在客戶端和目標對象之間起到一個中介的作用。
來張圖就比較清晰了
其中,代理模式會涉及到一些角色,
抽象角色,聲明真實的對象和代理對象的共同的接口。
代理角色:代理對象內部含有真實對象的引用,也就是說,代理對象可以操作真實的對象,於此同時,代理對象會提供和真實對象相同的接口,以便再任何時刻都能代替真實對象,同時,代理對象可以在執行真實對象操作的時候,附加上其它的操作,也就是對真實對象的一個簡單的封裝。
真實角色:代理角色所要代表的角色,也就是我們最終想要引用的對象。
//抽象角色 public abstract class Subject { abstract public void request(); }
//真實角色 public class RealSubject extends Subject { @Override public void request() { // TODO Auto-generated method stub System.out.println("From Real Proxy"); } public RealSubject(){ } }
//代理對象 public class ProxySubject extends Subject{ private RealSubject realSubject; //用真實角色作為代理角色的屬性 public ProxySubject() { } @Override public void request() { //這個方法封裝了真實對象的request方法 preRequest(); if (realSubject == null) { realSubject = new RealSubject(); } realSubject.request();//此處執行真實對象的request方法 postRequest(); } private void postRequest() { // TODO Auto-generated method stub } private void preRequest() { // TODO Auto-generated method stub } }