java代理模式

Java动态代理模式
1. 代理:一个角色代表别一个角色来完成某些特定的功能。
比如:生产商,中间商,客户这三者这间的关系
客户买产品并不直接与生产商打交道,也不用知道产品是如何产生的,客户只与中间商打交道,而中间商就可以对产品进行一些包装,提供一些售后的服务。

代理模式有三个角色: 1. 抽象主题角色 2. 代理主题角色 3. 实际被代理角色
其它类通过访问代理主题角色来访问实际被代理角色。

2. 下面我们来个一个静态代理的实现。
我以一个坦克为例。
抽象主题角色:Moveable
Java代码 复制代码 收藏代码
  1. package com.gjy.proxy;
  2. blic interface Moveable {
  3. void move();
    package com.gjy.proxy;

public interface Moveable {
		void move();
}

代理主题角色:TanktimeProxy
Java代码 复制代码 收藏代码
  1. package com.gjy.proxy;
  2. public class TanktimeProxy implements Moveable{
  3. private Moveable t;
  4. public TanktimeProxy(Moveable t) {
  5. super();
  6. this.t = t;
  7. }
  8. @Override
  9. public void move() {
  10. long time1 = System.currentTimeMillis();
  11. System.out.println("time1="+time1);
  12. t.move();
  13. long time2 = System.currentTimeMillis();
  14. System.out.println("time2="+time2);
  15. System.out.println("运行时间为:"+(time2-time1));
  16. }
  17. }
	package com.gjy.proxy;

public class TanktimeProxy implements Moveable{
		private Moveable t;
	
		public TanktimeProxy(Moveable t) {
			super();
			this.t = t;
		}


		@Override
		public void move() {
			long time1 = System.currentTimeMillis();
			System.out.println("time1="+time1);
			t.move();
			long time2 = System.currentTimeMillis();
			System.out.println("time2="+time2);
			System.out.println("运行时间为:"+(time2-time1));
		}
}

实际被代理对象:Tank
Java代码 复制代码 收藏代码
  1. package com.gjy.proxy;
  2. public class Tank implements Moveable{
  3. @Override
  4. public void move() {
  5. System.out.println("TanK moving........");
  6. }
  7. }
package com.gjy.proxy;

public class Tank implements Moveable{

		@Override
		public void move() {
			System.out.println("TanK moving........");
		}
	
}


测试:
Java代码 复制代码 收藏代码
  1. package com.gjy.proxy;
  2. public class TestTank {
  3. public static void main(String[] args) {
  4. Tank t = new Tank();
  5. Moveable move = new TanktimeProxy(t);
  6. move.move();
  7. }
  8. }
package com.gjy.proxy;

public class TestTank {
		public static void main(String[] args) {
			Tank t = new Tank();
			Moveable move = new TanktimeProxy(t);
			move.move();
		
		}
}

从上例可以看到代理主题角色:TanktimeProxy实现了对Tank的move()方法运行时间的计算,而TanktimeProxy,Tank都实现了Moveable接口,通过调用TanktimeProxy的move()方法我们可以实现对Tank的move()方法的运行时间的计算,而不用在Tank的move()方法中作任何实现,这就是代理的作用。代理实现时TanktimeProxy,Tank必需实现Moveable接口。  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值