代理模式

JS设计模式之代理模式 Star这个类就是明星,StarProxy这个类就是明星经纪人,假如我们是商家,现在我们想请这个明星来参加我们的活动,我们开始和经纪人谈价格,talk出价1w,此时经纪人会做一个判断,如果价格大于等于1w,这个活动就比较适合,可以参加,代理就会去通知明星演出,如果小于1w的话,就不会,这个就是简单的代理模式,我们要访问明星,需要经过经纪人(也就是代理),才能去访问。其实就是给一个对象提供一个代理,如果要访问这个对象必须经过这个代理,先说,这个模式的优点是什么。 阅读详情

1、代理模式

代理对象 :对原始对象的方法做了增强

2、静态代理

2.1定义接口

//抽象主体
public interface Subject {
 
public String request();
 
}

2.2定义接口的实现类 RealSubject并实现该接口,重写方法–被代理对象

package cn.happy.proxy;
 
public class RealSubject implements Subject {
    @Override
    public String request() {
        System.out.println("真实主题的操作内容");
        return "呵呵";
    }
 
}

2.3定义接口的实现类ProxySubject并实现该接口重写方法。自定义属性RealSubject,调用request方法,在这里进行增强

package cn.happy.proxy;
 
public class ProxySubject implements Subject {
    //01.植入一个  真实主题的引用
        private RealSubject real;
         
        @Override
        public String request() {
            System.out.println("before execute");
            real.request();
            System.out.println("after execute");
            return "proxy";
        }
         
        public RealSubject getReal() {
            return real;
        }
 
 
        public void setReal(RealSubject real) {
            this.real = real;
        }
    }

2.4测试类

 //静态代理
public class Spring_01Test {
     
        @Test
        public void proxyTest(){
             
            //准备一个真实主题,被代理对象
            RealSubject real=new RealSubject();
             
            //02.创建一个代理对象
             
            ProxySubject proxy=new ProxySubject();
            proxy.setReal(real);
             
            proxy.request();
 
        }
 
}

2.5测试结果

[外链图片转存中…(img-56LRRF9w-1588854309799)]

3、JDK动态代理

3.1定义接口IUserDao

//接口
public interface IUserDAO {
     public String add();
      public String edit();
}

3.2定义接口实现类,实现某接口,并重写该方法

public class UserDAOImpl implements IUserDAO {
 
    public String add() {
        //开启事务
        System.out.println("add ok!");
        return "add";
        //logger
    }
    public String edit() {
        //开启事务
        System.out.println("edit ok!");
        return "edit";
        //开启事务
    }
}

3.3测试类:(重点)

//jdk动态代理测试
public class MyTest {
    @Test
    /**
     * jdk动态代理测试
     */
    public void staticproxyTest(){
        //01.先创建出接口实现类
        final IUserDAO dao=new UserDAOImpl();
        //02.类Proxy
        IUserDAO proxy=(IUserDAO)Proxy //
                      .newProxyInstance(dao.getClass() //获取实现类的类加载器
                        .getClassLoader(), dao.getClass(). //
                        getInterfaces(), // 获取实现类接口
                        new InvocationHandler() {  //Invocation(调用 ) Handler (处理)
             
            /**proxy  代理对象
             * method 被代理对象 方法  add()
             * args add方法的参数
             */
            public Object invoke(Object proxy, Method method, Object[] args)
                    throws Throwable {
                 
                //code 1
                System.out.println("start Tran");
                //真正业务
                //执行dao对象的add方法,传入的是args参数,返回值是result
                Object result = method.invoke(dao, args);
                 
                //code 2
                 
                System.out.println("write logger");
 
                return result;
            }
        });
        String add = proxy.add();
        System.out.println("======="+add+"=======");//"add"
        proxy.edit();
          
    }
}

3.4实现效果

[外链图片转存中…(img-6JmTTcHK-1588854309801)]

4、cglib动态代理

4.1 创建被代理的类

public class UserService {
    public void delete(){
        System.out.println("delete ok!");
    }
}

4.2 测试类:(重点)

//cglib动态代理测试
public class MyTest {
    @Test
    /**
     * cglib动态代理测试
     */
    public void cglibProxyTest(){
         
       final UserService service=new UserService();
        
       //cglib动态代理\4\
       //01.需要类 Enhancer
       Enhancer enhancer=new Enhancer();
        
       enhancer.setSuperclass(service.getClass());
        
      enhancer.setCallback(new MethodInterceptor(){
 
        public Object intercept(Object obj, Method method, Object[] aobj,
                MethodProxy methodproxy) throws Throwable {
            System.out.println("before");    
             
            method.invoke(service, aobj);
             
            System.out.println("after");
            return null;
        }    
      });
       
      //02.用方法
       UserService proxy= (UserService)enhancer.create();
       //03.
       proxy.delete();
       }
}

4.3 实现效果

在这里插入图片描述

5、静态代理、JDK代理和cglib的区别

静态代理: 简单,代理模式,是动态代理的理论基础。常见使用在代理模式

jdk动态代理 : 需要有顶层接口才能使用,但是在只有顶层接口的时候也可以使用,常见是mybatis的mapper文件是代理。
使用反射完成。使用了动态生成字节码技术。

cglib动态代理 :可以直接代理类,使用字节码技术,不能对 final类进行继承。使用了动态生成字节码技术。

OpenClaw 完整部署教程 版本:OpenClaw 2026.2.13更新日期:2026-02-26适用系统:Linux (Ubuntu/Debian/CentOS) 阅读详情

相关推荐

避坑指南:DeepSeek Function calling流式输出中的常见问题与解决方案

本文深入探讨了在DeepSeek Function Calling中实现流式输出时常见的参数拼接、函数依赖管理和错误处理等核心挑战。针对流式响应中参数碎片化的问题,提供了健壮的参数拼接方案与状态管理策略。同时,文章详细阐述了如何管理函数调用顺序、处理条件性执行,并构建了分阶段的错误处理与重试机制,旨在帮助开发者构建稳定、高效的流式AI应用。

weixin_29062671的博客 201

代理模式(ProxyPattern)

代理模式(ProxyPattern) 代理模式 为其他对象提供一种代理以控制对这个对象的访问 远程代理,也就是为一个对象在不同的地址控件提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实 虚拟代理,根据需要创建开销很大的对象,通过他来存储实例化需要很长时间的真是对象 安全代理 用来控制真实对象访问时的权限 智能指引 指当调用真实的对象时,代理处理另外一些事情 模式动机 在某些情况下,一个客户不想或者不能直接引用一个对 象,此时可以通过一个称之为“代理”的第三者来实现 间接引用。代理对象可以在客户

Sharker_Blog的博客 583

接上篇,记录一下【Unity 3D对博途PLCSIM的通讯】文章有点长~仔细看,很基础

本文参考链接:西门子PLC丨PROFINET通讯仿真(虚拟通讯)做了一些更详细的优化,本文使用的类库并非原作者使用的类库。 首先,昨天项目已经创建好了,这边也加了一个InputField和一个Button,可以实现简单的读取,ok开始。 放入准备好的通讯类库; 新建一个博途的项目,本次测试使用博途V15,测试环境为虚拟机,Unity运行在本地计算机,建立博途项目流程如下: 新建项目,右键项目-属性-保护-对勾,如图: 不得不说的是,仿真中加密的FB块是无法下载的哦~ 添加CPU...

NS_Speak(IVAV) 8055

设计模式之代理模式ProxyPattern(六)

1、什么是代理模式?代理模式是23种设计模式中的一种。代理模式是一种结构型设计模式,它允许为其他对象提供一个替代品或占位符,以控制对这个对象的访问。2、代理模式的角色构成抽象主题(Subject):定义了真实主题和代理主题的共同接口,这样代理类可以通过实现该接口来代理真实主题。真实主题(Real Subject):定义了代理所代表的真实对象。代理(Proxy):持有对真实主题的引用,并实现了与真实主题一样的接口,客户端通过代理来访问真实主题,同时可以在访问真实主题前后进行一些额外操作。

徐泗空的博客 1460

开源项目 ruoyi-sso-oauth2(一)环境配置

Ruoyi若依实现单点登录SSO、oauth2认证

Xiaoweidumpb 9681

ESP-Mesh-Lite vs ESP-Mesh:如何选择适合你的物联网组网方案?

本文深入对比了乐鑫ESP-Mesh-Lite与ESP-Mesh两种物联网组网方案的核心差异。重点解析了ESP-Mesh-Lite分布式协议栈架构的优势,即每个节点拥有独立IP,可直接访问外部网络,极大简化了应用层开发。文章从网络架构、性能、开发体验及适用场景等多维度进行分析,为开发者根据项目需求(如分布式数据采集、智能家居或集中控制网络)选择最合适的方案提供了清晰的决策框架。

pluto的博客 815

代理模式 (ProxyPattern)

文章目录代理模式 (ProxyPattern)代理模式的定义代理模式的优点代理模式的缺点代理模式的结构代理模式的实现普通代理强制代理动态代理AOP使用场景 代理模式 (ProxyPattern) 代理模式的定义 为其他对象提供一种代理以控制对这个对象的访问。 代理模式的优点 真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件事务,附带的结果就是编程简洁清晰。 具体主题角色是随时都会发生变化的,只要它实现了接口,甭管它如何变化,都逃不脱如来佛的手掌(接口),那我们的代理类完

有问题的请私信或关注v【技术印记】留言 412

C语言新手必练:10个实战小项目带你快速上手(附完整代码)

本文为C语言初学者精选10个实战项目,从基础的温度转换器到高级的迷宫求解算法,涵盖输入输出、条件判断、循环控制、数组操作等核心知识点。每个项目配有完整代码和详细解析,帮助新手通过实践掌握编程思维,特别适合刚学完语法但缺乏实战经验的学习者。

weixin_29208077的博客 736

代理模式-ProxyPattern

前言: 代理模式与装饰者模式: 相同点: 1. 前提条件:装饰者(代理者)与被装饰者(委托者)要继承相同的父类或实现相同的接口。 2. 都可以增强某个类的方法,对程序进行扩展。 不同点: 1. 代理者是为某个对象添加一个代理,以控制对这个对象的访问。而装饰者增强某个类的方法。 2. 代理可以在调用核心方法之前做前置处理...

Jason Blog 197

【滚雪球学数学建模】第4.1节·概率与统计建模,一文搞懂!

🎓 本文收录于 《滚雪球学数学建模》专栏,本专栏专注于从零基础出发,带你循序渐进掌握数学建模的核心方法与思维路径。通过“滚雪球式”学习法,从最简单的生活化案例到经典建模工具,再到省赛、国赛真题实战演练,逐步积累知识与技能,帮助你搭建完整的建模体系。无论你是刚接触建模的新生,还是希望提升科研与竞赛能力的学者与工程师,本专栏都将为你提供一条清晰、高效、可实操的建模成长路线,助力你快速进阶,突破难点,迈向数学建模竞赛与实际应用的更高峰 🚀!

**My Coding Family** 1348

122、Android Camera HAL3 框架:Request、Result、Metadata 的异步管道模型

本文深入剖析了Android Camera HAL3框架中的异步管道模型,围绕Request、Result和Metadata三个核心要素展开。作者通过实际案例(黑屏闪退问题)切入,揭示了异步模型中常见的帧序错乱陷阱。文章详细阐释了三个角色的交互机制,指出HAL3采用生产者-消费者模式的关键特征:Request与Result一一对应但不保证顺序。针对开发实践,总结了三个必须加锁的场景和回调函数的锁使用禁忌,并给出解决帧序问题的具体方案(独立帧号生成器)。最后提出五项经验性建议,强调异步模型带来的灵活性与复杂性

sundong_81的博客 211

代理模式(ProxyPattern)

代理模式(ProxyPattern)

明明明的博客 543

重回童年的经典系列☀️|【炸弹人小游戏】制作过程+解析 | 收藏起来跟曾经的小伙伴一起梦回童年!

Unity,小游戏开发。 本篇文章对童年经典小游戏——炸弹超人进行制作和解析。不知道有没有勾起你童年的回忆呢!快来和我一起制作这个童年经典的小游戏吧! 敬请品尝!

努力前行,总会成为自己心中的那道光 13万+

设计模式之代理模式(ProxyPattern)

设计模式之代理模式(ProxyPattern) 文章目录设计模式之代理模式(ProxyPattern)一.代理模式(ProxyPattern)二.编程实例1.图片读取案例2.String类访问修饰符[]读写操作区分案例 一.代理模式(ProxyPattern) 代理模式是创建一个代理类,来帮助我们处理真实类,一般来说,这种代理类有点像明星的经纪人,如果你想接触到明星,必须先和他们的经纪人打交道。...

Worthy_Wang的博客 476

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

代理模式(proxyPattern)

定义  为其他对象提供一种代理以控制这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理模式可以在客户端与目标对象之间起到中介的作用。分类  1.静态代理:由程序员创建或特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。  2.动态代理:在程序运行时,运用反射机制动态创建而程。UML...

zz_ddup的博客 221

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

java设计模式之 代理模式【Proxy Pattern】 详解

首先我们举个例子说明一下什么是策略模式: 什么是代理模式呢?我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道 被代理人能做哪些事情不能做哪些事情吧,那就是两个人具备同一个接口,代理人虽然不能干活,但是被 代理的人能干活呀。 比如西门庆找潘金莲,那潘金莲不好意思答复呀,咋办,找那个王婆做代理,表现在程序上时这样的: 先定义一种类型的女人: package com.cbf4lif...

蛋蛋淡淡定的庄园 299

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

第6章 代理模式【ProxyPattern】

静态代理的目标对象和代理对象需要实现统一个接口或者继承相同的父类。JDK动态代理的代理对象不需要实现接口,但是目标对象需要实现接口。

qq_41846002的博客 423

结构型模型之-代理模式(proxyPattern)

结构型模型之-代理模式(proxyPattern) 参考网址:https://www.runoob.com/design-pattern/proxy-pattern.html 1 代理模式简介 代理模式主要是用中间层控制原生对象的访问 和装饰器模式的区别:装饰器模式为了增强功能,而代理模式是为了加以控制。 2 代理模式图解 3 代理模式简单实现 3.1 代码组成类 Image ProxyImage RealImage TestProxy 3.2 具体代码 Image package com.sh

shufangreal的博客 331

设计模式代理模式(ProxyPattern)

核心模块:抽象角色,真实角色,代理角色 所有代码请访问:git@code.aliyun.com:289804201/PatternLearn.git 使用场景:适合不方便直接访问对象的情况; 优点:协调了调用者和被调用者,减少耦合,起到了保护目标对象的作用; 缺点:由于使用代理可能会使请求速度变慢; 注意: 1,与中介者模式区别,中介者对中介双方权重

didiao11300的专栏 354

代理模式【Proxy Pattern】

代理模式 1.一个A接口 2.一个A类实现A接口 3.一个B代理类实现A接口,构造方法(多态)代理A类 4.一个执行类,创建B代理类

m0_37538752的博客 244

代理模式【Proxy Pattern 】

博客地址  http://blog.youkuaiyun.com/ftx2540993425   下面横线以上内容是借鉴别人的,为了表达对作者的敬意,不做不恰当的修改,我个人的总结在后面。     什么是代理模式呢?我很忙,忙的没空理你,那你要找我呢就先找我的代理人吧,那代理人总要知道被代理人能做哪些事情不能做哪些事情吧,那就是两个人具备同一个接口,代理人虽然不能干活,但是被代理的人能干活呀。

菜鸟的飞翔 634

代理模式ProxyPattern

代理模式就是开发过程中为了耦合度的降低而出现的一种模式,简单就是中间层 为了不让调用者直接调用而产生强耦合而设计的通过代理者转达的一个模式 代理接口 代理者(助理) 被代理者(明星) 代理者内部有被代理者对象,以及被代理者具有的方法,通过一些约束,来使调用者调用被代理者完成某些功能 如:导演要找明星来演电影,先通过助理进行预约,助理通过一些约束条件查看是否符合明星出演,符合,则明星出演...

Enter 533

代理模式(Proxy Pattern)

     代理模式是对象的结构模式。代理模式给某一个对象提供一个代理对象,并有代理对象控制对原对象的 引用。 一、类图 二、示例 1、结构图     2、java代码 Subject抽象类: package proxy; abstract public class Subject {  abstract public void request(); }   R...

qq_26880671的博客 205
上一篇: SpringAOP的xml和注解两种实现方式
下一篇: kafka-demo
hao9e
博客等级 码龄7年 189粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值