代理(Proxy)模式

系统 1623 0

所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

代理(Proxy)模式给某一个对象提供一个代理,并由代理对象控制对原对象的引用。

一,结构

 

 

 

 

 

 

 

 

 

 

 

 

 

 

抽象主题角色(Subject): 声明了真实主题和代理主题的共同接口,这样一来在任何使用真实主题的地方都可以使用代理主题。

代理主题(Proxy)角色: 代理主题角色内部含有对真是主题的引用,从而可以在任何时候操作真实主题对象;代理主题角色提供一个与真实主题角色相同的接口,以便可以在任何时候都可以替代真实主体;控制真实主题的应用,负责在需要的时候创建真实主题对象(和删除真实主题对象);代理角色通常在将客户端调用传递给真实的主题之前或之后,都要执行某个操作,而不是单纯的将调用传递给真实主题对象。

真实主题角色(RealSubject)角色: 定义了代理角色所代表的真实对象。

二,示例代码

    package com.oa.interceptor;

/**
 * 抽象主题角色
 * @author Salmon
 *
 */
public interface Subject {
  public void Request();
}

/**
 * 真实主题角色
 * @author Salmon
 *
 */
public class RealSubject implements Subject {
  public void Request() {
    System.out.println("Called RealSubject.Request()");
  }
}

/**
 * 代理主题角色
 * @author Salmon
 *
 */
public class Proxy implements Subject {
  private RealSubject realSubject;
  
  public void Request() {
    if(realSubject == null)
      realSubject = new RealSubject();
    preRequest();
    realSubject.Request();
    postRequest();
  }

  private void preRequest() { 
	  System.out.println("PreRequest."); 
  }

  private void postRequest() { 
	  System.out.println("PostRequest."); 
  }
}

/**
 * 客户端调用
 * @author Salmon
 *
 */
public class Client {
  public static void main(String[] args) {
    Proxy p = new Proxy();
    p.Request();
  }
}
  

 

代理(Proxy)模式


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论