设计模式之(8)——代理模式
定义:为某个对象提供一个代理,以达到对这个对象的访问控制,代理类和委托类有共同的父类或者父接口,这样可以在使用委托类的地方都可以使用代理对象来替换(这符合程序设计中的“里氏替换原则”),代理类负责请求的预处理、过滤等初步处理之后,再将请求分派给委托类进行处理,代理类当然也可以在委托类执行完毕之后做一些其它工作;
网站建设哪家好,找成都创新互联公司!专注于网页设计、网站建设、微信开发、重庆小程序开发公司、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了昌江免费建站欢迎大家使用!
代理模式根据代理类的生成时间不同可以静态代理和动态代理。
静态代理:是由程序员创建或工具生成代理类的源码,在编译期就已经确定了委托类和代理类,在程序运行前就已经存在代理类的字节码文件,代理类和委托类的关系在运行前就已经确定了。
动态代理:动态代理类的源码是在程序运行期间由JVM根据反射等机制动态生成的 ,所以不存在代理类的字节码文件,代理类和委托类的关系在程序运行时动态确定。
说了这么多那么代理有什么优点呢?
说起了一大堆,总的来说主要有两大点:1、可以对客户端隐藏委托类的实现;2、可以实现客户端和委托类之间的解耦,在不修改委托类的情况下做一些其他的处理,当然核心业务还得调用委托类的方法处理;
日常生活中代理的场景很常见,比如说我们有一套房子需要出售,但是我们没有时间自己天天带看房,那么我们就可以把这套房子挂委托给房产中介,中介就可以帮我们筛选潜在客户,带客户看房,确定买家之后,中介就联系我们和买家签订合同,买家付款、双方完成过户、房屋物业水电燃气交接事宜等,在这个过程中卖家就是委托类,而中介就是代理类;
其实在Java中也有很多场景需要使用代理,如RPC的远程调用,我们就是通过代理类去实现的,还有Spring中的AOP切面也是为切面生成了代理类;
下面我们先讲讲静态代理的实现:
1、定义接口和接口的实现(委托类);
2、定义代理类(定义接口的代理对象);
3、将接口的实例注入到代理对象中,然后通过代理对象去调用委托类的实现;
静态代理的示例代码如下:
package cn.com.pep.model.proxy; /** * *@version: 1.0 * @Description: 声明委托类的行为,卖房 *@author: wwh * @date: 2022年9月4日-下午4:17:12 */ public interface Sell { public void sellHouse(); }
文章名称:设计模式之(8)——代理模式
浏览地址:http://azwzsj.com/article/dscgijh.html