Java设计模式-代理模式

代理模式是对象的结构模式。代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。

代理分为静态代理和动态代理:

静态代理:

一个简单的例子:你Client去租房Rent,可是你找不到host,那你怎么办你找中介Proxy,此时这个中介就是代理。

上面每一个独对象代表一个类,

Rent.java

<span style="font-size:18px;">public  interface  Rent() {
	public void rent(){
	}
}</span>
Host.java

<span style="font-size:18px;">public class Host implements Rent {
	public void rent(){
	System.out.println("房子出租");
	}
}</span>
Proxy.java

<span style="font-size:18px;">public class Proxy implements Rent{
	Host host = new Host();
	public void rent(){
	seeHouse();
	//这里可以进行一些额外的操作
	host.rent();
	//这里也可以进行一些其他操作
	pay();
	}
	
	public void seeHouse(){
		System.out.println("看房子"):
	}
	public void pay(){

		System.out.println("付钱");
	}
	
}</span>

Client.java

<span style="font-size:18px;">public class Client{
	Host host = new Host();
	Proxy proxy = new Proxy();
	proxy.rent();
}</span>

如上看见的就是一个静态代理的过程。

在平时的开发中我们用到的比较多的例子是:

1.在登陆一个论坛的时候,也是会进行各种身份验证,只有通过了才能进行先关的操作,比如,管理员才能修改基本的信息,而用户只能浏览这样的时候,我们最好使用代理。


2.某个客户端不能直接操作到某个对象,但又必须和那个对象有所互动.
举例两个具体情况: 
(1)如果那个对象是一个是很大的图片,需要花费很长时间才能显示出来,那么当这个图片包含在文档中时,使用编辑器或浏览器打开这个文档,打开文档必须很迅速,不能等待大图片处理完成,这时需要做个图片Proxy来代替真正的图片.

(2)如果那个对象在Internet的某个远端服务器上,直接操作这个对象因为网络速度原因可能比较慢,那我们可以先用Proxy来代替那个对象.

总之原则是,对于开销很大的对象,只有在使用它时才创建,这个原则可以为我们节省很多宝贵的Java内存. 所以,有些人认为Java耗费资源内存,我以为这和程序编制思路也有一定的关系.

静态代理的缺点是 :

1)代理对象的一个接口只服务于一种类型的对象,如果要代理的方法很多,势必要为每一种方法都进行代理,静态代理在程序规模稍大时就无法胜任了。 
2)如果接口增加一个方法,除了所有实现类需要实现这个方法外,所有代理类也需要实现此方法。增加了代码维护的复杂度 

所以就有了动态代理。

动态代理

动态代理又分为基于接口的动态代理(jdk)和基于类的动态代理。

基于jdk的动态代理主要是实现Proxy和InvocationHandler。

具体步骤是: 
a. 实现InvocationHandler接口创建自己的调用处理器 
b. 给Proxy类提供ClassLoader和代理接口类型数组创建动态代理类 
c. 以调用处理器类型为参数,利用反射机制得到动态代理类的构造函数 
d. 以调用处理器对象为参数,利用动态代理类的构造函数创建动态代理类对象 

具体的操作之后再写一篇。

注意:动态代理当你获得代理对象之后,你在调用对象中的任意方法,就会触发invoke方法,不要主动调用。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值