浅谈Java设计模式之代理模式

代理模式是一种应用非常广泛的设计模式。其本质就是“当调用一个Java对象的时候,并不是调用其对象本身,而是调用他的代理”。代理模式的好处嘛,如下:1当需要调用的对象会带来很大的系统开销时,代理对象可以对他进行延迟加载(也就是说代理对象并未完整的或压根就没有创建需要调用的对象),从而当真正需要用到这个对象的时候才去加载它,提高系统的性能。2当目标对象的功能不足的时候,创建代理对象可以增强原对象的功能。这是所谓的动态代理。从另一个角度说,动态代理就是需要调用某些方法,不需要硬编码的创建拥有该方法的对象,而是用代理的方式完成。

代码解释如下,为了简单起见,代码写的尽量简洁,以体现结构:

首先定义一个接口:

package test;

public interface IA//创建一个接口IA 
{
	void method();
}


定义一个接口的实现类A:

package test;

public class A implements IA 
{

	public A()//A的构造函数
	{
		try
		{
			Thread.sleep(3000);//现在假设创建A的对象是一件耗费时间的过程
		}
		catch (InterruptedException e)
		{
			e.printStackTrace();
		}
	}
	@Override
	public void method() 
	{
		System.out.println("执行A的方法");
	}
	
}
定义A的代理ProxyA:

package test;

public class ProxyA implements IA//创建A的代理
{
	private IA ia;//代理对象中包含IA对象
	
	public ProxyA(IA ia)
	{
		ia=this.ia;
	}

	@Override
	public void method() 
	{
		if(ia == null)
		{
			ia =new A();//此时才真正创建A的对象
		}
		
		ia.method();//此时才真正调用A的方法
	}

}

测试一下:

package test;

public class Test
{
	public static void main(String[] args)
	{
		long start =System.currentTimeMillis();
		IA pa=new ProxyA(null);//创建A的代理,注意,此时A并未被真正的创建
		long mid=System.currentTimeMillis();
		
		System.out.println("创建代理对象所花的时间:"+(mid-start));
		
		pa.method();//调用pa的方法,也就是调用A对象的方法,此时A对象才被创建出来
		
		long end=System.currentTimeMillis();
		
		System.out.println("创建真正需要调用的对象所花的时间:"+(end-mid));
	}

}

上面的代码的输出是:

创建代理对象所花的时间:2
执行A的方法
创建真正需要调用的对象所花的时间:3007


也就是说创建A的代理的时间很短,而创建A的时间很长,使用代理模式,可以先创建这个对象的代理,而真正要用到这个对象的时候才去创建他,节省了系统的开销。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值