23种设计模式(八)代理模式(阁瑞钛伦特软件-九耶实训)

常说的设计模式是23种设计模式,分为3大类:

  • 创建型模式5种:工厂方法、抽象工厂、单例、建造者、原型
  • 结构型模式7种:适配器、代理、桥接、装饰者、外观、享元、组合
  • 行为型模式11种:模板方法、解释器、策略、观察者、迭代器、职责链、命令、备忘录、状态、访问者、中介者。

上次咱们把创建型模式的5种模式都介绍完了,还额外介绍了简单工厂模式。

上次咱们说了“适配器模式”。今天来看一看结构型模式中的“代理模式”。

结构型模式重点在于结构的变化。“代理模式”的“代理”可以帮助我们理解其初衷。

生活中有很多事情需要有“代理”。例如“租房需要中介代理找房”、“结婚需要婚庆公司代理婚庆”等等这样的事情。

23种设计模式(八)代理模式(阁瑞钛伦特软件-九耶实训)

首先,我们有一个接口,可以说是“要做什么事情”

23种设计模式(八)代理模式(阁瑞钛伦特软件-九耶实训)

例如“要结婚”

例如“要租房”

其次,具体实现接口的类,可以说是“真实实现要做的事情”。

23种设计模式(八)代理模式(阁瑞钛伦特软件-九耶实训) 

例如“具体实现要结婚的事情”

例如“具体实现要租房的事情”

最后,用代理模式搞定前后事宜。

23种设计模式(八)代理模式(阁瑞钛伦特软件-九耶实训)

例如“房屋中介带你看房及后续签订合同”

例如“婚庆公司为你进行典礼及收尾”

测试类中应用:

 

23种设计模式(八)代理模式(阁瑞钛伦特软件-九耶实训)

上面用的是静态代理模式,下面我们来用“动态代理模式”看看效果。

在原有接口和真实类的基础上,构建“动态代理模式”。

23种设计模式(八)代理模式(阁瑞钛伦特软件-九耶实训)

 

在这里,我们重点应用Proxy的“动态代理模式”叫做“JDK动态代理”,利用反射机制,达到动态获取对象并执行功能方法,也就是上述的“程序流程”。(Proxy的应用,可参考API说明文档中的说明,加以理解)。

测试方法应用:

23种设计模式(八)代理模式(阁瑞钛伦特软件-九耶实训)

 

又到了讲故事的时间了。我们来设置一个《西游记》里的一个场景。

话说猪悟能(也就是后来的猪八戒),在高老庄想娶高翠兰为妻。本来正常情况,猪悟能与高翠兰结婚。

23种设计模式(八)代理模式(阁瑞钛伦特软件-九耶实训)

但是高翠兰妈妈不同意,于是派人去请道士降伏猪悟能。又恰巧遇见唐僧和孙悟空师徒,于是请孙悟空去降伏猪妖。

23种设计模式(八)代理模式(阁瑞钛伦特软件-九耶实训)

 

结果让猴子做代理,猪悟能就倒霉了,想不到猴子会变成高翠兰蒙骗结婚,还被降伏,拜在唐僧门下,获法号“八戒”。自此猪八戒跟随唐僧去西天拜佛求经。

不得不说,猴子这个“代理”做的称职又到位,不光是降伏,连猪都带走了。

23种设计模式(八)代理模式(阁瑞钛伦特软件-九耶实训)

 从上述场景设定中,我们能分析出,“结婚”是主要目的,真实类是高翠兰实现“结婚”的行为,猪八戒要调用高翠兰的行为,正常情况下,和高翠来结婚。但猴代理出现,更改了结婚行为,突然给老猪安排得“妥妥当当”。

 

23种设计模式(八)代理模式(阁瑞钛伦特软件-九耶实训)

 接口

23种设计模式(八)代理模式(阁瑞钛伦特软件-九耶实训)

 

23种设计模式(八)代理模式(阁瑞钛伦特软件-九耶实训)

真实类:

23种设计模式(八)代理模式(阁瑞钛伦特软件-九耶实训)

23种设计模式(八)代理模式(阁瑞钛伦特软件-九耶实训) 

猪类: 

23种设计模式(八)代理模式(阁瑞钛伦特软件-九耶实训)

正常情况调用,高翠兰与猪悟能结婚了:

23种设计模式(八)代理模式(阁瑞钛伦特软件-九耶实训) 

23种设计模式(八)代理模式(阁瑞钛伦特软件-九耶实训)

但是猴代理出现了:

静态代理:

23种设计模式(八)代理模式(阁瑞钛伦特软件-九耶实训)

 猪悟能调用了静态代理:

23种设计模式(八)代理模式(阁瑞钛伦特软件-九耶实训)

23种设计模式(八)代理模式(阁瑞钛伦特软件-九耶实训) 

 

JDK动态代理:

23种设计模式(八)代理模式(阁瑞钛伦特软件-九耶实训) 

 突然结婚对象变成了猴子,请求出老猪的心理阴影面积。

23种设计模式(八)代理模式(阁瑞钛伦特软件-九耶实训)

 

23种设计模式(八)代理模式(阁瑞钛伦特软件-九耶实训)

即使真实类不是高翠兰,只要“大圣”这个金牌代理在,猪八戒就铁定去西天拜佛求经

23种设计模式(八)代理模式(阁瑞钛伦特软件-九耶实训)

23种设计模式(八)代理模式(阁瑞钛伦特软件-九耶实训)  23种设计模式(八)代理模式(阁瑞钛伦特软件-九耶实训)

来源:九耶(钛伦特)

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年6月27日
下一篇 2022年6月27日

相关推荐