设计模式回顾之八:代理模式(Proxy)

设计模式回顾系列文章: 主要针对工作中常用常见的设计模式进行整理、总结,同时分享以供大家拍砖。

------------------------------------------------ 

代理模式:

为其它对象提供一种代理以控制对这个对象的访问。

在某些情况下,一个对象不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

为了提供额外的处理或者不同的操作而在实际对象与调用者之间插入一个代理对象,这些额外的操作通常需要与实际对象进行通信。

 

程序实现:

抽象类,提供代理对象和真实对象的共用接口,使得任何使用真实对象的地方都能使用代理对象:

public abstract class Subject {
	public abstract void request();
}

真实对象,继承抽象类:

public class RealSubject extends Subject{
	@Override
	public void request() {
		System.out.println("handle real subject request...");
	}
}

代理对象,同样继承抽象类:

public class Proxy extends Subject{
	private RealSubject realSubject;
	
	public Proxy(RealSubject real){
		this.realSubject=real;
	}
	@Override
	public void request() {
		if(realSubject==null){
			realSubject=new RealSubject();
		}
		System.out.println("before real subject request.");//请求前处理逻辑.
		realSubject.request();
		System.out.println("after real subject request.");//请求后处理逻辑.
	}
}

程序入口:

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

 

举例:权限代理(权限访问控制)、远程访问代理等。

 

关于Java动态代理:

代理类程序运行前并不存在,需要在程序运行时动态生成(无需手工编写代理类源码),那就是动态代理了。

代理类程序的生成使用的是java反射机制:需要指定类加载器、目标接口以及代理处理器(实现InvocationHandler接口的类)。

Proxy.newProxyInstance(c.getClass().getClassLoader(),c.getClass().getInterfaces(),ih); 

有兴趣的读者,请看我另外一篇blog:

http://shensy.iteye.com/blog/1698197 Java动态代理详解

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值