纯手写理解设计模式代码之代理模式

【设计模式】用Java手写21种常见设计模式 文章目录十二、行为1——模板方法模式十三、行为2——迭代器模式 配套使用效果更佳: 本博客配套开源源码github点击跳转 在《25种常见设计模式思想(上)》中我介绍了4种创建型设计模式和7种结构型设计模式,在此博客中我将继续介绍剩下的x种行为类设计模式。以下是本篇博客的思维导图: 十二、行为1——模板方法模式 模板方法模式非常类似于定制表格,设计者先将所有需要填写的信息头(字段名)抽取出来,再将它们整合在一起成为一种既定格式的表格,最后让填表人按照这个标准化模板去填写自己特有的信息,而不必为书写内容、先 阅读详情

代理模式

代理模式属于结构型设计模式

静态代理模式
package com.demo.proxy;

/**
 * 代理模式
 * 结构型设计模式
 * 三个角色:真实角色Target、代理角色Proxy、消费者Consumer
 * 静态代理模式:
 * 代理角色与真实角色耦合性太高,不适用
 * 但是理解动态代理的第一步
 *下面以房产出租为例:房主、中介、租客一一对应真实、代理、消费者
 */
//租客
interface Person{

    void rent();
}
//房主
class Householder implements Person{

    public void rent() {
        //出租
        System.out.println("出租");
    }

}
//中介
class Agent implements Person{

    private  Person householder;

    public Agent(Householder householer){
        this.householder=householer;
    }

    public void rent() {
        householder.rent();
    }

    public void sign(){
        System.out.println("请签合同");
    }
}
//实例
public class StaticProxy {
    public static void main(String[] args) {
        //实例化代理角色
        Agent agent = new Agent(new Householder());
        //调用代理角色的方法,但实际是调用真实角色的方法
        agent.rent();//出租
        //调用代理角色本身方法
        agent.sign();//请签合同
    }
}

动态代理模式
JDK动态代理
package com.demo.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * JDK动态代理模式
 * JDK动态代理的实现关键在于java.lang.reflect.Proxy类
 * 其newProxyInstance(ClassLoader loader,Class<?>[] interfaces, InvocationHandler h)方法是整个JDK动态代理的核心,用于生成指定接口的代理对象。
 * 这个方法有三个参数,ClassLoader表示加载动态生成的代理类的类加载器,interfaces代理类需要实现的接口,InvocationHandler调用处理器InvocationHandler
 */
//同样使用房主、中介、租客三位角色,手写调用处理器
class JDKDynamicProxyHandler implements InvocationHandler {
    private Person householder;

    public JDKDynamicProxyHandler(Person householder) {
        this.householder = householder;
    }

    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        before();
        method.invoke(householder, args);
        after();
        return null;
    }
    public void before(){
        System.out.println("考察一下");
    }
    public void after(){
        System.out.println("决定了");
    }
}

//实例
class JDKDynamicProxy {
    public static void main(String[] args) {
        Person houseHolder = new Householder();
        /**
         * 通过
         * Person.class.getClassLoader() 类加载器   生成代理类的字节码文件
         * new Class[]{Person.class}共同实现Person接口 保证真实角色与代理角色的强一致性
         * new JDKDynamicProxyHandler(houseHolder)手写的调用处理器 最终调用invoke()进行处理
         * 获得代理对象
         */
        Person proxy = (Person) Proxy.newProxyInstance(Person.class.getClassLoader(), new Class[]{Person.class}, new JDKDynamicProxyHandler(houseHolder));
        proxy.rent();

    }
}

CGLIB动态代理
package com.demo.proxy;


import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;

/**
 * CGLIB动态代理
 * JDK动态代理的目标对象必须实现接口,CGLIB动态代理则没有这个限制
 * 它是利用ASM开源包,对代理对象类的class文件加载进来,通过修改其字节码生成子类来处理。
 */
public class CGLIBDynamicProxy implements MethodInterceptor {


    @Override
    public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
        //.....增加逻辑
        Object invokeSuper = methodProxy.invokeSuper(o, objects);
        return invokeSuper;
    }

}

class Total {

    public void paly(){
        //........
    }

}

class test{
    public static void main(String[] args) {
        //Enhancer相当于jdk动态代理的Proxy
        Enhancer enhancer = new Enhancer();
        //设置对应的参数
        enhancer.setSuperclass(Total.class);
        enhancer.setCallback(new CGLIBDynamicProxy());
        //正式创建代理类
        Total total = (Total)enhancer.create();
    }
}
两万字吐血总结,代理模式及手写实现动态代理(aop原理,基于jdk动态代理) 代理模式及手实现动态代理(aop原理)一、代理模式1. 定义2. 示例(1)静态代理(2)动态代理3. 通用类图4. 代理模式的优点二、jdk动态代理实现原理1. jdk动态代理源码分析(通过该示例学会阅读源码的方法)2.jdk动态代理生成的代理类的源码3.总结三、手写实现jdk动态代理 一、代理模式 熟悉代理模式的可以直接点击目录第二章,jdk动态代理实现原理,本文的精髓所在,通过这个例子,教大家如何去学习源码。 1. 定义 代理模式(Proxy Pattern) 是一个使用频率非常高的设计模式,其定义如下: Provide a surrogate or placeholder for an 立即下载

相关推荐

从零开始:用这些公开数据集搞定电力AI项目(含鸟巢、绝缘子、负荷预测等33个实战资源)

本文系统梳理了电力AI领域33个精选公开数据集,涵盖目标检测、负荷预测等关键场景,如鸟巢检测、绝缘子缺陷识别等。通过实战案例解析数据预处理、模型选型及性能优化策略,帮助工程师快速构建端到端解决方案,解决电力AI项目中的数据获取与处理难题。

weixin_42522552的博客 216

精讲23种设计模式-001:纯手写Java动态代理模式

001:纯手写Java动态代理模式1 代理设计模式基本概念与应用场景2 实现静态代理两种方式3 静态代理与动态代理模式的区别4 基于JDK动态代理的使用5 为什么Jdk动态代理不能用子类接收6 JDK生成的代理类$Proxy源码分析7 手写JDK动态代理 1 代理设计模式基本概念与应用场景 课程内容 代理模式为何是程序员必备技能 静态代理与动态代理实现区别 Jdk动态代理为何需要InvocationHandler接口 CGLIB动态代理与Jdk动态代理区别 10分钟完全纯手写一个Jdk动态代理 代理设计

枫火的博客 839

企业级AI项目落地实战指南

企业级 AI 项目落地需构建“分阶段实施 + 多维度风控”的双轮驱动体系:实施端通过 POC 验证技术可行性、试点建立评估标准、规模化实现价值复制,各阶段需结合行业案例(如东阳光药、旺盈集团)提炼可复用经验;风险端则需覆盖技术(数据安全、模型稳定性)、合规(全球监管动态)、组织(人才与文化)维度,通过工具化框架(AI TRISM)与案例策略(邮储银行可解释性设计、拓斯达培训体系)实现风险可控。最终通过“场景聚焦 - 合规嵌入 - 持续优化”的循环机制,实现 AI 技术从“试点成功”到“全面价值创造”的跨越。

2509_93209761的博客 1437

从简入繁详解代理模式(手写JDK动态代理)

1简单概要 代理模式:指为其他对象提供一种代理来控制对这个对象的访问。 代理模式主要有两个目的: ①保护目标对象; ②增强目标对象。 它的类图如下: 2分类与详解 2.1 静态代理 举个栗子:儿子正在找对象,而父母希望儿女早点找到另一半,于是在儿子找对象的同时帮他物色: interface Person{ void findLove(); } public class Son implements Person { public void findLo...

dms2017的博客 1083

Maven

是一款自动化构建工具,专注于Java项目的构建、依赖的管理。

weixin_58738870的博客 2163

UA-DETRAC数据集转YOLO格式

UA-DETRAC转YOLO

lafsca5的博客 9107

node代理模式在开发中的一点应用

主要介绍代理模式的实现方案和我在开发中的一点应用(真的只有一点) node中代理模式的实现方案主要有三种:对象组合,对象增强和ES2015中的Proxy对象,主要使用最后一种方式进行应用 MDN对Proxy的讲解 主要利用Proxy代理封装了一个计算函数耗时的代理 module.exports.Consuming = function (fun,funName) { return new Proxy(fun, { async apply(target, thisArg, args.

lamperouge_conan的博客 246

TC8:SOMEIPSRV_SD_MESSAGE_07-09

TTL为服务实例的生命周期。在此生命周期之后,不提供服务实例。

jasonj333 908

Spring设计模式——代理模式[手写实现JDK动态代理]

代理模式(Proxy Pattern):是指为其他对象提供一种代理,以控制对这个对象的访问。代理对象在客户端和目标对象之间起到中介作用,代理模式属于结构型设计模式。

胖胖爱吃肉~的博客 517

ICML-2025《Learning from Sample Stability for Deep Clustering》

用于指导深度聚类模型的训练,从而提升模型对困难样本的学习能力,最终改善整体聚类性能。首先,利用K-means在原始样本(非增强)的表征上进行聚类,得到初始聚类分配。其目的是鼓励模型对同一稳定样本在连续epoch中产生相近的表征。输出差异大)会产生更大的损失值,从而引导模型优先优化这些困难样本。此损失借鉴了NT-Xent损失的思想,但将正样本对定义为。最后,通过对比学习优化聚类中心,将同一聚类在。为了获得更具代表性的聚类中心,论文提出。为了学习更鲁棒的表征,模型在在线网络。首先,论文定义了样本。

Christo的博客 829

OpenCV实战之人脸美颜美型(八)——大眼(上)

从大众审美的角度来看,眼睛适当的“变大”会让人显得更加年轻。因此美型中就有一项大眼功能,其效果就是让眼睛适当变大,这章内容就围绕着大眼算法展开。

On my way 1211

DesignPattern设计模式

本文主要介绍了设计模式相关内容。包括软件设计的SOLID原则,设计模式的分类,单例模式的思想与实现,工厂模式的思想与实现,建造者模式的思想与实现,代理模式的思想与实现,责任链模式的思想与实现等内容。供个人学习使用。

专注Java和MySQL领域知识分享 1881

【麒麟桌面系统】企业微信提示当前副设备的企业微信版本较低

银河麒麟系统中登录企业微信时出现"副设备版本较低"的报错,可通过两种方案解决:1)更新最新版企业微信,需替换软件源并刷新软件商店安装8.0-50-4.1.26.6019kylin5版本;2)安装内测5.0版本企业微信,需下载deb包后使用sudo dpkg命令安装。文章还提供了常见问题解决表和长期维护建议,包括系统更新检查、软件源验证等维护项目及具体操作指南。

信创运维工程师 · 银河麒麟 & 容器实战 | 金融生产环境迁移·等保加固 | 142篇原创·17万+阅读 2272

深入理解Java设计模式——代理模式

目录一、什么是代理模式二、为什么使用代理模式三、代理模式实现原理四、代理模式应用场景五、代理模式创建的方式六、静态代理1. 基于接口实现方式2. 接口继承方式实现七、动态代理1. JDK动态代理1.1 原理分析2. CGLIB动态代理2.1 CGLIB原理2.2 CGLIB优缺点2.4 CGLIB 代理实现2.5 Maven依赖3. 静态代理与动态代理区别4. 使用AOP拦截Controller所有请求日志5. Maven依赖信息八、纯手写JDK动态代理1. JDK动态代理原理分析2. 纯手写动态代理分析3

记录各种Bug解决案例及日常学习内容 578

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

设计模式——代理模式详解(Java版)

看完这篇轻轻松松掌握代理模式

唯有努力,方可自信! 6321

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

设计模式之代理模式详解

摘要 代理模式是一种结构型设计模式,通过代理对象控制对真实对象的访问,在不修改原有代码的情况下实现功能增强。代理模式分为静态代理和动态代理(JDK动态代理、CGLib动态代理)。静态代理通过手动编写代理类实现,虽然简单直观但存在代码冗余、维护困难等问题。动态代理则利用反射或字节码技术在运行时生成代理类,更加灵活高效。代理模式广泛应用于权限控制、日志记录、事务管理等场景,是Spring AOP等框架的核心实现基础。

qq_41262225的博客 1117

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Java设计模式-代理模式(附手写简易版JDK动态代理实现)

以上就是代理模式的全部内容,希望能帮助大家理解代理模式。

aloshuwa的博客 920

设计模式 | 四、代理模式(静态代理、JDK动态代理、Cglib动态代理、手写动态代理核心部分)[ProxyPattern]

代理模式 1、应用场景 在生活中,我们经常见到这样的场景,如:租房中介、售票黄牛、婚介、经纪人、快递、事务代理、非侵入式日志监听等,这些都是代理模式的实际体现。代理模式(ProxyPattern)的定义也非常简单,是指为其他对象提供一种代理,以控制对这个对象的访问。代理对象在客服端和目标对象之间起到中介作用,代理模式属于结构型设计模式。使用代理模式主要有两个目的:一保护目标对象,二是对对象的某一功...

GiraffePeng的博客 545

java设计模式之代理模式详解

在某些开发场景下,一个类不能直接引用一个类,于是在这个中间产生了代理类,代理类能够代表被代理对象执行方法增强等相关操作,起到一个中介的作用。抽象主题角色,是代理类和代理类实现的共同规范,可以是接口也可以抽象类。真实主题角色,又叫做被代理类,业务中主要逻辑都是在这里面实现的。代理主题角色,又叫做代理类,一般的代理类会在代理类的方法前后进行完善操作,具备加强方法的功能。代理类属于结构型模式,分为动态代理和静态代理。

weixin_46676497的博客 929

设计模式之代理模式详解和应用

目录 1 代理模式定义 2 代理模式的应用场景 3 代理模式的通用写法 4 从静态代理到动态代理 5 静态模式在业务中的应用 6 动态代理在业务中的应用 7 手写JDK动态代理实现原理 7.1 JDK动态代理的实现原理 7.2 CGLib动态代理容易踩的坑 8 CGLib代理调用API及原理分析 9 CGLib和JDK动态代理对比 10 代理模式与Spring生态 10 静态代理和动态代理的本质区别 11 代理模式的优缺点 12 Spring中的代理选择原则

赵广陆 1454

设计模式之【代理模式】,有事找我“经纪人”

代理模式(Proxy Pattern)是指为其他对象提供一种代理,以控制对这个对象的访问,属于结构型模式。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。Java中的代理按照代理类生成时机不同又分为静态代理和动态代理。静态代理代理类在编译期就生成,而动态代理代理类则是在Java运行时动态生成。动态代理又有JDK代理和CGLib代理两种。

秃了也弱了 1603

设计模式--代理模式

设计模式之代理模式 第一、代理模式定义 代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。 举个例子来说明:假如说我现在想买一辆二手车,虽然我可以自己去找车源,做质量检测等一系列的车辆过户流程,但是这确实太浪费我得时间和精力了。我只是想买一辆车而已为什么我还要额外做这么多事呢?于是我就通过中介公司来买车,他们来给我找车源,帮我办理车辆过户流程,我只是负责选择自己喜欢的车,然后付钱就可以了。用图表示如下: 第二、使用代理模式的好处 中介隔离:在

scacdsf的博客 131

设计模式之-代理模式

代理模式(Proxy) ,英文又叫Surrogate。    代理在日常生活中很普遍,比如办身份证代理,产品销售代理,通信收费代理等,在计算机中也普遍存在,比如上网代理,远程调用代理,注册申请代理等。在代理过程中主要涉及的角色包括代理者,被代理者和事务,通过代理者和被代理者在是否

三人行必有我师,手写三行必有所悟 2424

读完源码,手写一个mybatis框架(使用mybatis设计模式和框架,内含手写源码)

继上篇手写spring后(点这里看原文),感觉有必要继续把mybatis框架也手写出来,供深入理解。 网上已经有很多手写框架的博客,但是很多只是按照mybatis流程,面向过程地写:解析xml-&gt;代理反射mapper-&gt;调用JDBC获取结果。虽然这样理解是对的,但是失去了理解mybatis源码意义。我遵循mybatis源码整体框架和设计,使用源码包名和类名,配合工厂模式和代理模式,写...

kuailebuzhidao的博客 3758

Java设计模式之代理模式

代理模式

weixin_57541178的博客 943

设计模式--代理模式详解

本专栏内容参考自:咕泡学院Tom老师的《Spring5核心原理与30个类手写实战》,仅作个人学习记录使用,如有侵权,联系速删。 代理模式 代理模式( Proxy Pattern )是指为其他对象提供一种代理,以控制对这个对象的访问,属于结构型模式。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。 先看下代理模式通用类图 代理模式一般包含三种角色︰ 抽象主题角色( Subject ):抽象主题类的主要职责是声明真实主题与代理的共同接口方法,该类.

想着百万年薪努力的小赵 963
上一篇: 纯手写理解设计模式代码之原型模式
下一篇: limit相关数据库优化
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值