• java代理模式


    前言:代理模式概念

    代理角色分类:

    • 抽象角色 : 一般使用接口或者抽象类来实现(定义要实现的基础操作的规范)
    • 真实角色 : 被代理的角色
    • 代理角色 : 代理真实角色 ; 代理真实角色后 , 一般会做一些附属的操作 .
    • 客户 : 使用代理角色来进行一些操作 .

    代理模式:即代理角色(如生活中的中介)对真实角色(如生活中的房主)需求的一种代劳,代理角色帮忙完成真实角色的基本操作,并可完成额外的工作(即代理类对被代理类的功能性增强)
    在这里插入图片描述
    应用场景:

    在不改变原有业务代码的前提下增加一些额外的通用功能

    1. 实现aop
    2. 全局捕获异常
    3. 日志的采集
    4. 权限控制
    5. Mybatis mapper
    6. Spring的事务
    7. Rpc远程调用接口
    8. 分布式事务原理代理数据源

    一:静态代理

    抽象角色:

    /**
     * 抽象角色-租房
     * @author lmy
     */
    public interface Send {
        /**
         * 租房动作
         */
        void rent();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    真实角色:

    /**
     * 真实角色(被代理角色):房主
     * @author lmy
     */
    public class Homeowner implements Send {
    
        public void rent() {
            System.out.println("房主房屋出租");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    代理角色:

    /**
     * 代理角色:中介
     * @author lmy
     */
    public class Proxy implements Send {
        private Homeowner homeowner;
    
        public void setHomeowner(Homeowner homeowner) {
            this.homeowner = homeowner;
        }
    
        public void rent() {
           // 对被代理角色的功能性增强
           seeHouse();
           // 聚合被代理角色本来的功能
           homeowner.rent();
           signContract();
        }
    
        public void seeHouse(){
            System.out.println("中介带客户看房");
        }
    
        public void signContract() {
            System.out.println("中介帮忙签订三方合同");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    客户角色:

    /**
     * 客户类角色
     * @author lmy
     */
    public class Client {
        public static void main(String[] args) {
            // 房主出租
            Homeowner homeowner = new Homeowner();
            // 中介代理房主
            Proxy proxy = new Proxy();
            proxy.setHomeowner(homeowner);
            // 客户找中介代理租房
            proxy.rent();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    静态代理的优点:

    • 可以使得我们的真实角色更加纯粹 . 不再去关注一些公共业务 。
    • 公共的业务由代理来完成 . 实现了业务的分工 。
    • 公共业务发生扩展时变得更加集中和方便 。

    静态代理的缺点:
    一个代理类只能代理一种类型的对象,如果要服务多类型的对象。就要为每一种对象都准备一个代理类,静态代理在程序规模稍大时就会出现大量重复代码,降低开发效率。

    所以动态代理就出现了!

    二:动态代理

  • 相关阅读:
    ElasticSearch(七):ES查询速度为什么那么快
    Android 如何在Service中使用ViewModel
    CSS 中的 HSL 和 HSLA 与 RGB 和 RGBA
    linuxcentos7虚拟机安装mysql5.7详细教程(tar包安装)
    LuatOS-SOC接口文档(air780E)-- iconv - iconv操作
    【目标检测】54、YOLO v7 | 又是 Alexey AB 大神!专为实时目标检测设计
    【python】(一)字符串基本操作
    linux-网站服务
    JVM学习——4——Java Memory Model ( JMM ) java内存模型
    01-若依环境搭建
  • 原文地址:https://blog.csdn.net/qq_41863697/article/details/125473305