【设计模式】代理模式

3. Spring AOP对动态代理的应用

 

一、什么是代理

你需要乘飞机,但是去不了机场,机票代理点就能让你实现买机票的需求。

你需要办理车过户,但是你不知道流程,在门口找一个专门代你办理的人,他都给你办了,这就是代理。

可见代理是个中间商,他代替原来的事务部门,满足你的需求,这就是代理模式的意义。

想象一下,你想修改某个类以实现特殊的功能,但是这个类在SDK包里,或者在远程机器上,怎么办?

这时候你可以找个代理,不就是想实现自定义功能吗?不用去改原始类了,你在我这随便改,我把原始类集成进来,这样我既有原始类的功能,又有你自定义的功能,不就完美了。

这就是代理模式。

二、代理的分类 1. 静态代理

这个 不好类比说明,因为java程序中有运行中的概念,静态代理就相当于运行前,你就已经写好了代理类,然后编译直接调用。

比如有如下场景,目前有个生产玩具的类,在不改变这个类的前提下,增加统计这个类生产玩具方法用时的功能,这个怎么实现?

1 /** 2 * 委托者,原始类,一个生产玩偶的工厂 3 */ 4 public class ToyFactory implements Produce { 5 @Override 6 public void produce_cat() { 7 System.out.println("生产了一只小猫"); 8 try { 9 Thread.sleep(new Random().nextInt(1000)); 10 } catch (InterruptedException e) { 11 e.printStackTrace(); 12 } 13 } 14 15 @Override 16 public void produce_deer() { 17 System.out.println("生产了一只小鹿"); 18 try { 19 Thread.sleep(new Random().nextInt(1000)); 20 } catch (InterruptedException e) { 21 e.printStackTrace(); 22 } 23 } 24 }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwjdfp.html