代理模式_靜態代理
阿新 • • 發佈:2018-11-04
在閻巨集博士的《JAVA與模式》一書中開頭是這樣描述代理(Proxy)模式的:
代理模式是物件的結構模式。代理模式給某一個物件提供一個代理物件,並由代理物件控制對原物件的引用。
代理模式的結構
所謂代理,就是一個人或者機構代表另一個人或者機構採取行動。在一些情況下,一個客戶不想或者不能夠直接引用一個物件,而代理物件可以在客戶端和目標物件之間起到中介的作用。
代理模式類圖如下:
在代理模式中的角色:
● 抽象物件角色:聲明瞭目標物件和代理物件的共同介面,這樣一來在任何可以使用目標物件的地方都可以使用代理物件。
● 目標物件角色:
● 代理物件角色:代理物件內部含有目標物件的引用,從而可以在任何時候操作目標物件;代理物件提供一個與目標物件相同的介面,以便可以在任何時候替代目標物件。代理物件通常在客戶端呼叫傳遞給目標物件之前或之後,執行某個操作,而不是單純地將呼叫傳遞給目標物件。
原始碼
抽象物件角色
public abstract class AbstractObject { //操作 public abstract void operation(); }
目標物件角色
public class RealObject extends AbstractObject { @Override public void operation() { //一些操作 System.out.println("一些操作"); } }
代理物件角色
public class ProxyObject extends AbstractObject{ RealObject realObject = new RealObject(); @Override public void operation() { //呼叫目標物件之前可以做相關操作 System.out.println("before"); realObject.operation(); //呼叫目標物件之後可以做相關操作 System.out.println("after"); } }
客戶端
public class Client { public static void main(String[] args) { // TODO Auto-generated method stub AbstractObject obj = new ProxyObject(); obj.operation(); } }
從上面的例子可以看出代理物件將客戶端的呼叫委派給目標物件,在呼叫目標物件的方法之前跟之後都可以執行特定的操作。
代理模式和介面卡模式的區別:
代理模式中被代理的物件和代理物件實現了相同的介面,而介面卡模式中的物件適配只是將目標物件委派到了介面卡物件中,目標物件和介面卡物件並沒有實現相同的介面。