代理模式(Proxy Pattern)

意图

为另一个对象提供一个替身或占位符以控制对这个对象的访问。

动机

在某些情况下,一个客户不能或者不想直接访问另一个对象,这时可以找一个中介帮忙完成某项任务,这个中介就是代理对象。

适用性

根据代理模式的使用目的,常见的代理模式有:

  • 远程代理(Remote Proxy):控制对远程对象(不同地址空间)的访问,它负责将请求及其参数进行编码,并向不同地址空间中的对象发送已经编码的请求。
  • 虚拟代理(Virtual Proxy):根据需要创建开销很大的对象,它可以缓存实体的附加信息,以便延迟对它的访问,例如在网站加载一个很大图片时,不能马上完成,可以用虚拟代理缓存图片的大小信息,然后生成一张临时图片代替原始图片。
  • 保护代理(Protection Proxy):按权限控制对象的访问,它负责检查调用者是否具有实现一个请求所必须的访问权限。

结构


实现

public interface Subject {
	void request();
}

public class RealSubject implements Subject {
	@Override
	public void request() {
		System.out.println("我是真正干活的...");
	}
}

public class Proxy implements Subject {
	private Subject realSubject;
	@Override
	public void request() {
		if(realSubject==null) {
			realSubject = new RealSubject();
		}
		preRequest();
		realSubject.request();
		postRequest();
	}
	public void preRequest() {
		System.out.println("访问真实主题之前处理...");
	}
	public void postRequest() {
		System.out.println("访问真实主题之后处理...");
	}
}

public class TestClient {
	public static void main(String[] args) {
		Subject proxy = new Proxy();
		proxy.request();
	}
}

已知应用

JDK动态代理

相关模式

描述此模式和其他模式之间的关系。

参考资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值