脚本宝典收集整理的这篇文章主要介绍了2022-04-25-设计模式之代理模式-静态代理模式,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
java设计模式之代理模式-静态代理模式学习整理
代理模式:由于某些原因需要为其他对象提供一个代理,通过该代理实现控制对该对象的访问的目的。 这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。
代理模式结构图
代理模式主要角色 1.抽象主题(Subject)角色 2.真实主题(RealSubject)角色 3.代理(Proxy)角色
为什么要用代理模式? 1)中介隔离作用;2)开闭原则,增加功能。
代理模式分类
核心两点:1)真实对象和代理对象需要实现同一个接口;2)代理对象需要持有真实对象的引用。
举例理解: 1)以租房为例,房东只需要考虑处理自己的房子交给中介即可,其余的都是由中介充当代理同租客进行签协议,带租客看房子,等等。 2)真实对象–>你,代理对象–>婚庆公司,接口–>结婚 new WeddingCompany(new Me()).marry(); 即 new ProxyObject(new RealObject()).interfaceDefinedFun();
代码实现方式: (1)继承关系(存在缺陷) 真实主题角色:
代理主题角色:
测试类:
(2)接口实现(优化) 抽象主题角色:
真实主题角色(多个):
代理主题角色:
测试类:
总结: 使用了静态代理模式情况下,我们没有修改真实角色类中的业务代码,而是选择以代理类的方式增强了它的功能,耦合度低,可扩展性好。静态代理由于不需要通过反射获取目标对象,所以性能也更好。 但代理模式会造成系统设计中类的数量增加,在客户端和目标对象之间增加一个代理对象,会造成请求处理速度变慢,同时也增加了系统的复杂度。
优点:真实角色也就是业务类只需要关注业务逻辑本身,保证了业务类的重用性。这是代理的共有优点。
缺点: 1)代理对象的一个接口只服务于一种类型的对象,如果要代理的方法很多,势必要为每一种方法都进行代理,静态代理在程序规模稍大时就无法胜任了。 2)如果接口增加一个方法,除了所有实现类需要实现这个方法外,所有代理类也需要实现此方法。增加了代码维护的复杂度。
参考博客: 1)https://blog.csdn.net/S_yyuan/article/details/121561438; 2)https://blog.csdn.net/qq_53311045/article/details/122156602; 3)https://blog.csdn.net/yz1925506412/article/details/123667565; 4)kkb-wln-teacher直播公开课:https://www.kaikeba.com/open/item?c=1463
以上是脚本宝典为你收集整理的2022-04-25-设计模式之代理模式-静态代理模式全部内容,希望文章能够帮你解决2022-04-25-设计模式之代理模式-静态代理模式所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。