静态代理商

作者 : 开心源码 本文共1547个字,预计阅读时间需要4分钟 发布时间: 2022-05-12 共198人阅读
  1. 概念
    代理商是一种模式,提供了对目标对象的间接访问方式,即通过代理商访问目标对象。我们在软件设计时常用的代理商一般是指静态代理商,也就是在代码中显式指定的代理商。

    对目标对象的间接访问

    image.png

  2. 用途
    便于在目标实现的基础上添加额外的功能操作,前阻拦,后阻拦等,以满足自身的业务需求,同时代理商模式便于扩展目标对象功能的特点也为多人所用。

    • 添加预解决、调用后解决等操作
    • 扩展功能
  3. 组成

  • 业务接口
  • 业务实现类 负责实现主要的业务方法
  • 业务代理商类 负责对调用的业务方法作阻拦、过滤、预解决。
  1. 案例演示

    • 接口

      public interface IAccountService {    // 查询账户    public void queryAccount();    // 修改账户    public void updateAccount();}
    • 业务实现类

      public class AccountServiceImpl  implements  IAccountService{    @Override    public void queryAccount() {        System.out.println("查看账户...");    }    @Override    public void updateAccount() {        System.out.println("修改账户...");    }}
    • 业务代理商类

      public class AccountServiceProxy implements IAccountService {    private IAccountService accountService;  //组合一个业务实现类对象来进行真正的业务方法的调用    /**     * 覆盖默认构造器     *     * @param accountService     */    public AccountServiceProxy(IAccountService accountService) {        this.accountService = accountService;    }    @Override    public void queryAccount() {        System.out.println("查询账户的预解决——————");        // 调用真正的查询账户方法        accountService.queryAccount();        System.out.println("查询账户之后————————");    }    @Override    public void updateAccount() {        System.out.println("修改账户之前的预解决——————");        // 调用真正的修改账户操作        accountService.updateAccount();        System.out.println("修改账户之后——————————");    }}
    • 调用

      public class Application {    public static void main(String[] args) {        IAccountService accountService = new AccountServiceImpl();        AccountServiceProxy accountProxy = new AccountServiceProxy(accountService);        accountProxy.updateAccount();        accountProxy.queryAccount();    }}
  2. 静态代理商缺点分析
    一个代理商类只能对一个业务接口的实现类进行包装,假如有多个业务接口的话就要定义很多实现类和代理商类才行。
    假如代理商类对业务方法的预解决、调用后操作都是一样的(比方:调用前输出提醒、调用后自动关闭连接),则多个代理商类就会有很多重复代码。

    • 一个代理商类只能对一个业务接口的实现类进行包装
    • 多个代理商类中预解决、后解决代码重复

思考题:

是否代理商所有实现类的方法调用:根据传进来的业务实现类和方法名进行具体调用。

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 静态代理商

发表回复