嗨喽~小伙伴们XX好呀,

本章我们来介绍,java中出现的静态代理模式。

代理,对应于英语单词-----Proxy,从字面上理解,就是在实现代理目标(Target)所有的需求的同时,还能够实现代理目标无法做到的事情,比如为目标添加审查和监控功能,主要包括前置处理和后置处理。

读完上面这段话,小伙伴们可能有点懵,咱从网上找到了一个典型的例子,在这分享给大家,请大家从下面的例子中细细体会:

话说啊我们可爱的小明同志马上就要结婚啦,可是,许多的琐事诸如场地布置,鲜花摆放,婚礼流程等等,他自己操办不过来,于是,他找到了一家婚庆公司,由婚庆公司代替他去操办所有的琐事,而他自己,只需要专注于自己的事情就行了(比如努力工作挣足够的钱来办婚礼^_^)。这样一个浅显的例子,咱可以用一段代码描述:

public class Wedding {public static void main(String[] args) {//小明----真实角色Marry xiaoming = new XiaoMing();//婚庆公司----代理角色Marry marryCompany = new MarryCompany(xiaoming);//用婚庆公司的marry()方法代替小明的marry()方法marryCompany.marry();}
}//结婚接口
interface Marry{void marry();
}//小明----真实角色
class XiaoMing implements Marry{//小明应该做的事情@Overridepublic void marry() {System.out.println("小明结婚啦~");}
}//婚庆公司----代理角色
class MarryCompany implements Marry{private Marry target; //要代理的真实角色(比如小明)public MarryCompany(Marry target){this.target = target;}@Overridepublic void marry() {//前置处理before(); //代理角色不同于真实角色的新功能//代理目标该做的事情this.target.marry();//后置处理after(); //代理角色不同于真实角色的新功能}private void before() {System.out.println("布置场地和鲜花~");}private void after() {System.out.println("小明该付尾款了~");}
}

这段代码使用了静态代理模式,简单说来,使用代理,有以下优点:

1. 代理对象可以做许多代理目标做不到的事情(比如本例子中的场地布置,鲜花摆放,婚礼流程等等)

2. 代理目标可以只专注于自己的事情。(比如本例子中,小明只需要考虑挣够钱来还尾款)

在这,我们扩展一点点知识,上面代码段里,有如下代码:


//婚庆公司----代理角色
Marry marryCompany = new MarryCompany(xiaoming);//用婚庆公司的marry()方法代替小明的marry()方法
marryCompany.marry();

咱可以使用匿名的方式,将两句合为一句,用一个图来说明:

​​​​​​​​​​​​​​

其实,之所以介绍代理方面的知识,是为了引出接下来的东西,

我们来看一看JDK里关于Thread类的一段源码:

显然,这是Thread类的某一个构造方法,细心的小伙伴们可能看到了熟悉的“target”字样!没错!!!这个构造方法便是使用了代理模式编写, 如果你已经对上面那个例子中的代码比较熟悉,那么对于下图中所表示的Java线程启动方式就有了更深刻的理解了:

(图中的NewThread实现了Runnable接口)

甚至,结合Lambda表达式,小伙伴们也能够看懂下面的代码:

  new Thread( () -> System.out.println("我是易果啥笔") ).start();

如果小伙伴们没学过Lambda表达式的话,可以参考我的另一篇博文:

java是如何简化成一行代码的?-----Lambda表达式初识​​​​​​​

代理模式也是设计模式的一种。 了解代理模式的特点,有助于我们理解一些底层原理的实现。

最后喜欢的小伙伴们点个赞鼓励支持一下吧~

浅谈java的静态代理模式相关推荐

  1. 小白都能懂的设计模式 java版 静态代理模式实战练习(超详细)

    静态代理: 角色分析: 抽象角色:一般使用接口或者是抽象类来解决 真实角色:被代理的角色 代理角色:代理真实角色,代理真实角色后,我们一般会做一些附属操作 客户:访问代理对象的人 以一个租房子的例子来 ...

  2. java之静态代理模式

    静态代理模式: 代理模式: 代理人可以替受代理的人完成一些工作,比如:学校与学生之间的关系来说,学生就好比被被代理类,学生只需要负责上课,写作业,考试等事务,而类似于课程,考试,任课教师的安排等都不需 ...

  3. 浅谈 JAVA中静态初始化块和非静态初始化块的区别

    众所周知在JAVA编程语言中有两种初始化块: 静态初始化块 非静态初始化块 他们到底有什么区别呢?今天就浅谈一下JAVA中静态初始化块和非静态初始化块的区别 静态初始化块 定义: static{} 执 ...

  4. 浅谈golang中的代理模式

    来自一个大佬的博客,建议食用 设计模式不分语言,是一种思维层面的体现,但是不能在不同语言中使用同一套实现(每种语言有不同的特性),比如go,本身是没有继承一说,但是通过结构体的组合来实现语义上的继承. ...

  5. java mediator_浅谈Java设计模式——中介者模式(Mediator)

    一.概述 用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互.中介对象用来封装对象之间的关系,各个对象可以不需要知道具体的信息 ...

  6. 浅谈Java和SAP ABAP的静态代理和动态代理,以及ABAP面向切面编程的尝试

    文章目录 Java的静态代理 静态代理的优缺点 ABAP的静态代理 Spring AOP的动态代理 JDK动态代理的优缺点 CGLIB动态代理的优缺点 ABAP CGLIB的模拟实现 ABAP Pre ...

  7. Java从接触到放弃(十五)--线程、多线程、静态代理模式

    Day Fifteen 线程 多任务: 可以理解为一个人同时去干几件事,就好比在上厕所的时候边大号边玩手机,这就是一个多任务的实例.再好比现在很多人中午在吃饭的时候,或者说在吃饭的时候,看一些下饭综艺 ...

  8. java设计模式--工厂模式、静态代理模式、动态代理模式

    工厂模式 代码实现: 步骤一:创建一个接口 Car.java package FactoryMode;public interface Car {public void run(); } 步骤二:创建 ...

  9. Java多线程:静态代理模式

    静态代理模式 要求:有真实角色,代理角色 真实角色和代理角色要实现同一个接口 代理角色要持有真实角色的引用 设计静态代理模式 (1)必须有一个共同使用的接口 1 // 共同的接口 2 public i ...

最新文章

  1. matlab随机数生成
  2. Aspx页面中直接编写javascript脚本
  3. 数据中心小母线与列头柜供配电系统的综合比较
  4. javascript设计模式实践之模板方法--具有百叶窗切换图片效果的JQuery插件(二)...
  5. 试用去水印_教你一键视频去水印,支持抖音、快手、小红书、哔哩哔哩等几十个平台...
  6. CENTOS5下VSFTPD的设置
  7. java线程详解_Java线程详解
  8. 路由表(FIB)详解
  9. 【Elasticsearch】Elasticsearch性能调优
  10. win7 IE9 internet explorer[IE] [IE 9]已停止工作
  11. After Effects - Bodymovin 插件验货及感受
  12. java扫雷具有win7_window自带扫雷|扫雷下载|经典扫雷_win7扫雷下载_多特软件站
  13. 永恒之蓝漏洞自查-MS17010漏洞自查与修复
  14. 互联网金融反欺诈体系
  15. 超声的pacs系统和dicom服务器,基于DICOM的PACS系统设计与实现
  16. pycharm运行python程序没有解释器怎么办
  17. 用【马科维茨资产组合选择模型】来咕叽咕叽
  18. ps2键盘测试软件,PS2键盘51测试程序2
  19. sow工作任务说明书例子
  20. 计算机的击键方法教学教案,初中七年级信息技术上册教案:键盘操作与练习

热门文章

  1. mybatis中使用in查询时的注意事项
  2. Java爬取网页源代码解析
  3. 软件过程评估和软件能力评价的方法与步骤
  4. kubernetes实战篇之windows添加自签ca证书信任
  5. 深入理解Plasma(一)Plasma 框架
  6. Mycat-server-1.6.5 常见分片方式
  7. docker使用阿里云镜像仓库docker
  8. 转- --python 3 编码
  9. phpstorm 的下载、安装与激活
  10. 我的Maven POM配置