• 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

    静态代理的优点:

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

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

    所以动态代理就出现了!

    二:动态代理

  • 相关阅读:
    肠道微生物群与过敏性鼻炎
    C++数据存储、表示形式和基本运算
    炫酷又高效的数据可视化大屏,做起来真的没那么难!丨极客星球
    21天学习挑战赛—Python学习记录第一篇
    实现第三方app开机自启
    关于聚合根,领域事件的那点事---深入浅出理解DDD
    【重识云原生】第六章容器6.2.1节——Kubernetes概述
    Redux 的困扰与如何技术选型
    asp.net网球馆计费管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio
    FFmpeg Mp4加解密
  • 原文地址:https://blog.csdn.net/qq_41863697/article/details/125473305