• 浅谈Java中的代理模式


    代理模式

    代理这个词在生活中很常见。设想这样一个场景,假如你需要购买一个海外的包包,那么这个时候你一般会怎么办呢?第一反应是自己跑到海外去购买,然后再回来。em,说的很轻松,但是这个过程确是及其麻烦并且困难的。先不说你能不能最终买到这个包包,中间的一些列花费就够折腾的了。所以,这个时候代购就出现了。我们完全可以找代购去帮我们解决我们的这个需求,我们只需要找到专业的代购,告诉他们我们想要的包包是啥样的,剩下的事情就只管交给他们就是了。

    在Java中,也有代理的概念。Java中的代理指的是,当我们需要实现某个功能或者需求的时候,一个对象想要访问另外一个类的方法或者对象,但是由于一些其他原因,可能并不能直接访问该类的方法或者对象,这个时候就可以通过另外一个类或者对象去访问。

    在这个过程中,把我们想要访问的对象称为目标对象,中间的这个对象称之为代理对象,也叫做代理

    事实上,代理模式是Java中23种设计模式之一

    代理模式是指,为其他对象提供一种代理以控制对这个对象的访问,在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户类和目标对象之间起到中介的作用。

    换句话说,使用代理对象,是为了在不修改目标对象的基础上增强主业务逻辑。客户类想要访问的对象是目标对象,但客户类可以访问的对象是代理对象。客户类对目标对象的访问是通过访问代理对象来实现的。当然,代理类与目标类要实现同一个接口

    例如,有A,B,C三个类。A原来可以调用C类的方法,现在因为某些原因C类不允许A类调用其方法,但B类可以调用C类的方法。A类可以通过B类调用C类的方法。这里的B就是A的代理。A通过代理B访问C

    原来的访问关系:

    在这里插入图片描述

    通过代理的访问关系:

    在这里插入图片描述

    静态代理

    代理类是手动实现的Java文件,同时代理的目标对象是规定好了的。

    静态代理的实现比较简单,这里我们用一个案例来演示一下,主要有以下组成:

    目标接口:TargetInterface

    目标类:TargetInterfaceImpl实现目标接口

    代理类:TargetProxy实现目标接口 同时进行目标类功能的增强

    测试类:Test 测试代码的运行

    目标接口:TargetInterface

    /**
     * 目标接口
     */
    public interface TargetInterface {
       
    
         void sayHello(String name);
    
         void sayThanks(String name);
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    目标类:TargetInterfaceImpl,实现目标接口

    /**
     * 目标接口的实现类  称为目标类
     */
    public class TargetInterfaceImpl implements TargetInterface{
       
        @Override
        public void sayHello(String name) {
       
            System.out.println("你好..." + name);
        }
    
        @Override
        public void sayThanks(String name) {
       
    
            System.out.println("谢谢..." +
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
  • 相关阅读:
    PeLK:通过周边卷积的参数高效大型卷积神经网络
    如何使用libswscale库将YUV420P格式的图像序列转换为RGB24格式输出?
    力扣第654题 最大二叉树 c++注释版
    Netty对JDK做了哪些定制和优化
    STM32WB55开发(3)----断开蓝牙连接
    深度学习基础之《TensorFlow框架(12)—图片数据》
    项目开发中Maven的单向依赖-2022新项目
    数据结构 ----- 插值查找
    自动化测试中如何编写配置文件 ? 该使用什么工具 ? 一文详解使用ConfigParser读写配置文件
    【LLM】浅谈 StreamingLLM中的attention sink和sink token
  • 原文地址:https://blog.csdn.net/yhb500234/article/details/127794962