代理(Proxy)模式

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

代理(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();
  }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值