前言
本章我们来介绍,java
中出现的静态代理模式。
代理,对应于英语单词-----Proxy
,从字面上理解,就是在实现代理目标(Target
)所有的需求的同时,还能够实现代理目标无法做到的事情,比如为目标添加审查和监控
功能,主要包括前置处理和后置处理。
代理如何理解?
咱从网上找到了一个典型的例子,在这分享给大家,请大家从下面的例子中细细体会:
话说啊我们可爱的小明同志马上就要结婚啦,可是,许多的琐事诸如场地布置,鲜花摆放,婚礼流程等等,他自己操办不过来,于是,他找到了一家婚庆公司,由婚庆公司代替他去操办所有的琐事,而他自己,只需要专注于自己的事情就行了(比如努力工作挣足够的钱来办婚礼_)。
这样一个浅显的例子,咱可以用一段代码描述:
1 | public class Wedding { |
这段代码使用了静态代理模式
,简单说来,使用代理,有以下优点:
代理对象可以做许多代理目标做不到的事情(比如本例子中的场地布置,鲜花摆放,婚礼流程等等)
代理目标可以只专注于自己的事情。(比如本例子中,小明只需要考虑挣够钱来还尾款)
在这,我们扩展一点点知识,上面代码段里,有如下代码:
1 | //婚庆公司----代理角色 |
咱可以使用匿名
的方式,将两句合为一句,用一个图来说明:
Thread类中的代理模式
其实,之所以介绍代理方面的知识,是为了引出接下来的东西,
我们来看一看JDK
里关于Thread类
的一段源码:
显然,这是
Thread类
的某一个构造方法,细心的小伙伴们可能看到了熟悉的“target
”字样!没错!!!这个构造方法便是使用了代理模式编写, 如果你已经对上面那个例子中的代码比较熟悉,那么对于下图中所表示的Java线程启动
方式就有了更深刻的理解了:(图中的NewThread
实现了Runnable接口
)
甚至,结合Lambda表达式
,小伙伴们也能够看懂下面的代码:
1 | new Thread( () -> System.out.println("我是易果啥笔") ).start(); |
代理模式也是设计模式的一种。 了解代理模式的特点,有助于我们理解一些底层原理的实现。