设计模式之(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://abwzjs.com/article/dscgijh.html