代理模式 - 动态代理

代理模式(静态代理、JDK 动态代理、CGLIB 动态代理) 房屋中介代理:客户手里没有房源信息,找一个中介商品代购:这些代购者可以去哪到比较低成本的商品,拥有自己的渠道代理模式(Proxy Pattern):是 23 中设计模式中的一种,属于结构型的模式。指一个对象本身不做实际的操作,而是通过其他对象来得到自己想要得到的结果。**意义:**目标对象只需要关心自己的实现细节,通过代理对象来实现功能的增强,可以扩展目标对象的功能。体现了非常重要的编程思想:不能随便修改源码,通过修改代理的方式来实现功能的扩展。 阅读详情

动态代理类使用到了一个接口InvocationHandler和一个代理类Proxy ,这两个类配合使用实现了动态代理的功能。

* 那么什么是动态代理呢?

  • 我们平常说的代理类是指: 给每个具体类写一个代理类,以后要使用某个具体类时,只要创建它的代理类的对象,然后调用代理类的方法就可以了。
  • 可是如果现在有许多的具体类,那就需要有许多的代理类才可以,这样很显然不合适。所以动态代理就应运而生了,我们只要写一个类实现
  • InvocationHandler 并实现它的invoke方法,然后再用Proxy的工厂方法newProxyInstance()创建一个代理对象,这个对象同样可以实现对具体类的代理功能。
  • 而且想代理哪个具体类,只要给Handler(以下代码中的Invoker)的构造器传入这个具体对象的实例就可以了。感觉是不是自己为该具体类造了一个代理类呢?
package designmodel;

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

/**
 * Created with IntelliJ IDEA.
 *
 * @Author zy
 * @Desciption:
 * @Date 2018-1-26 17:48
 */
interface AbstractClass {

    public void show();

}

// 具体类A  
class ClassA implements AbstractClass {

    @Override
    public void show() {
        // TODO Auto-generated method stub  
        System.out.println("我是A类!");
    }
}

// 具体类B  
class ClassB implements AbstractClass {

    @Override
    public void show() {
        // TODO Auto-generated method stub  
        System.out.println("我是B类!");
    }
}
//动态代理类,实现InvocationHandler接口  
class Invoker implements InvocationHandler {
    AbstractClass ac;

    public Invoker(AbstractClass ac) {
        this.ac = ac;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] arg)
            throws Throwable {
        //调用之前可以做一些处理  
        method.invoke(ac, arg);
        //调用之后也可以做一些处理  
        return null;
    }
}

/**
 * test
 */
public class DynamicProxyTest {

    public static void main(String[] args) {
        //创建具体类ClassB的处理对象  
        Invoker invoker1=new Invoker(new ClassA());
        //获得具体类ClassA的代理  
        AbstractClass ac1 = (AbstractClass) Proxy.newProxyInstance(
                AbstractClass.class.getClassLoader(),
                new Class[] { AbstractClass.class }, invoker1);
        //调用ClassA的show方法。  
        ac1.show();


        //创建具体类ClassB的处理对象  
        Invoker invoker2=new Invoker(new ClassB());
        //获得具体类ClassB的代理  
        AbstractClass ac2 = (AbstractClass) Proxy.newProxyInstance(
                AbstractClass.class.getClassLoader(),
                new Class[] { AbstractClass.class }, invoker2);
        //调用ClassB的show方法。  
        ac2.show();

    }
}  

结果

我是A类!
我是B类!
一文了解代理模式、动态代理、静态代理 什么是代理模式原来的访问关系:代理模式的作用:代理的分类什么是静态代理静态代理流程静态代理的实现实现步骤定义业务接口 目标类实现接口 代理类实现功能 测试 静态代理实现步骤:代理功能改造 静态代理的缺陷代理复杂,难于管理代理类依赖目标类,代理类过多动态代理JDK动态代理InvocationHandler接口Method 类Proxy类实现步骤CGLib(Code Generation Library)动态代理 CGLib动态代理的特点 CGLib实现的步骤代理模式是指,为其他对象提供一种代理以控制对这个.. 阅读详情

相关推荐

Spring代理模式——静态代理和动态代理

代理模式 1、静态代理 2、动态代理

不迁怒,不贰过。小知识,大智慧。 2501

Java代理模式之静态代理模式(Static Proxy)详解

文章目录1.定义2.举例说明3.代码组成部分4.以申请学校为例具体讲解 1.定义 代理模式为某个对象提供一个代理,以控制对这个对象的访问。代理类和委托类有共同的父类或父接口,这样在任何使用委托类对象的地方都可以用代理对象替代。代理类负责请求的预处理、过滤、将请求分派给委托类处理、以及委托类执行完请求后的后续处理。 2.举例说明 现实生活中有许多与Java静态代理模式相仿的例子 先从名称看来,代...

Kevin.wang 949

rk3399 linux 5.10 usb 2.0设备上电概率性注册失败

先排除硬件上的问题,然后就烧录kernel 4.1的的镜像,多次测试也没有发现这个问题,所以排除了硬件上的问题,然后。查下usb hub和usb 4G的复位脚,写驱动都给它们配上了,但是还是存在这个问题。最后通过对比rk3399.dtsi发现少了个power-domains = ;多次开关机,发现usb hub和4G都通信失败了,这就有点奇怪了,按理说usb驱动是没啥问题的。加上后,重新编译烧录,重新测试没有发现这个问题了!先查看usb log。

qq_32017483的博客 2674

设计模式之代理模式(动态代理)

概要设计模式是一门艺术,如果真正了解这门艺术,你会发现,世界都将变得更加优美。简介在上一篇已经大概讲解了代理模式,相信大家对代理模式有一定的了解了,如果没有不妨先去看看上一篇 设计模式之代理模式(静态代理)相信大家肯定有收获,如果有了一定的基础,那么在去看,相信理解会更加快,而且非常容易明白。代码演示因为上一篇已经比较详细的分析过了,所以直接上代码了(1)定义代理接口package com.zeng

ZengTao 2462

物联网开发笔记(34)- 使用Micropython开发ESP32开发板之控制步进电机(28BYJ-48)

使用Micropython开发ESP32开发板之控制步进电机(28BYJ-48)

zhusongziye的博客 1万+

PyTorch+C3D实战:用UCF101数据集训练你的第一个视频动作识别模型(附完整代码)

本文详细介绍了如何使用PyTorch和C3D模型在UCF101数据集上构建视频动作识别系统。从环境配置、数据预处理到模型训练与优化,提供了完整的代码实战指南,帮助开发者快速掌握视频行为识别技术。文章特别强调了3D卷积核设计、混合精度训练等关键技术要点,并分享了模型部署优化经验。

weixin_29233857的博客 218

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

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

GiraffePeng的博客 546

ctx->cvdl->cuvidGetDecoderCaps(&ctx->caps8) failed -> CUDA_ERROR_DEINITIALIZED: driver shutting down

ffplay -vcodec h264_cuvid sample_720p-2.h264 [quantum6@freeswitch freeswitch]$ ffplay -vcodec h264_cuvid sample_720p-2.h264 ffplay version 4.3.1 Copyright (c) 2003-2020 the FFmpeg developers built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-44) .

柳鲲鹏 2408

代理模式ProxyPattern以及java对此的支持——动态代理

代理模式,即Proxy Pattern,23种java常用设计模式之一。代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。通俗的说,就是客户端通过代理对象去操纵委托对象(或者说被代理对象)。 举个例子,就业季到了,你需要定制一套西服,打扮一番,人模人样给面试官留个好印象。通常校

chengmaoning的专栏 698

zemax像差参数Ray Fan/Spot Diagram/MTF/....讲解三

zemax像差参数Ray Fan/Spot Diagram/MTF/....讲解三

weixin_72050316的博客 1386

YOLOv11改进 - 卷积Conv | GCNet之金箍棒块GCBlock : 重参数化捕获全局依赖 | CVPR 2025

文介绍了GCBlock在YOLOv11中的结合应用。GCBlock是GCNet的核心组件,能高效捕获特征图中的全局依赖关系,融合了非局部网络和挤压 - 激励网络的优势,降低计算成本并保障模型性能。其遵循“上下文建模 - 特征变换 - 特征融合”框架,通过全局平均池化、全连接层等操作生成注意力权重。我们将GCBlock集成进YOLOv11,替代原有的部分卷积模块,实现更高效的全局上下文建模。实验证明,YOLOv11-GCBlock在目标检测任务中表现出色,展现了GCBlock在深度学习中的广泛应用前景。

魔改工程师的博客 907

Java代理模式快速解析:从静态代理到动态代理

本文深入探讨了代理模式的核心概念、类型划分(静态代理与动态代理)及其典型应用场景,并通过代码示例详细演示了不同实现方式。静态代理以编译时绑定的方式增强功能,而动态代理则通过运行时生成实现高灵活性,特别适用于复杂多变的需求。文章还结合实际案例,展示了代理模式在日志记录、权限控制和分布式系统中的广泛应用,帮助读者全面掌握该模式的理论与实践。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 169万+

新手秒变高手:使用一键脚本快速安装OpenClaw并完成初始化配置

一键脚本是一种自动化工具,可以帮助用户快速完成软件的安装和配置过程,无需手动执行繁琐的命令。OpenClaw提供了官方的一键安装脚本,让新手用户也能轻松部署OpenClaw。

一键难忘的博客 359

代理模式、动态代理模式

在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。 在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。 介绍 意图:为其他对象提供一种代理以控制对这个对象的访问。 主要解决:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控...

HybridTheory_的博客 470

GEE:连续变化检测 CCDC 提取断点信息(干扰时间、干扰幅度、干扰次数)

本文将介绍在 Google Earth Engine (GEE) 平台上连续变化检测与分类(Continuous Change Detection and Classification, CCDC)提取扰动时间、干扰幅度、干扰次数信息,并下载到本地的代码。

养乐多的博客 1946

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

代理模式:一文彻底搞懂静态代理和动态代理

代理模式(Proxy Pattern)是一种结构型设计模式,它的概念很简单,它通过创建一个代理对象来控制对原始对象的访问。代理模式主要涉及两个角色:代理角色和真实角色。代理类负责代理真实类,为真实类提供控制访问的功能,真实类则完成具体的业务逻辑。这样,当我们不方便或者不能直接访问真实对象时,可以通过代理对象来间接访问。使用代理模式主要有两个目的:一是保护目标对象,二是增强目标对象。代理模式的原理是将真实类的功能封装在代理类中,最基本的方式就是创建一个代理类,代理类实现和真实类相同的接口,并且在代理类中引用真

qq_36756227的博客 1万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

代理模式———动态代理

动态代理 动态代理凭借其灵活性在框架中有着广泛的应用,下面简单记录一下我的学习理解; 代理模式: 基本概念 在百度百科中没有动态代理的概念,但是动态代理其实就是代理模式中的一种,所以在了解动态代理前最好先了解一下代理模式; 代理模式(英语:Proxy Pattern)是程序设计中的一种设计模式; 代理模式就是为其他对象提供一种代理以控制对这个对象的访问;在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用; 通过加粗的字可以了解到,代理模式应用到什么地方

YXXXYX的博客 2637

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

代理模式之动态代理

代理模式(Proxy Pattern) :给某一个对象提供一个代 理,并由代理对象控制对原对象的引用。代理模式的英 文叫做Proxy或Surrogate,它是一种对象结构型模式。 接口类 interface ProxyInterface{ void testProxy(); } 实现类 static class ProxyImpl implements Proxy...

94me的博客 390

代理模式-动态代理

代码例子如下:

#helloworld的博客 960

代理模式及Java两种动态代理JDK动态代理和CGLIB动态代理

代理模式 什么是代理模式 代理模式是设计模式的一种,他是指一个对象A通过持有另一个对象B,可以具有B同样的行为的模式。他在对象B的基础上提供了一层访问控制,当你需要访问对象B时,你需要经过对象B的代理对象A来实现访问。因此代理模式也被称为委托模式,他能够提供非常好的访问控制。 对象A并不提供真正的执行逻辑,而是通过组合B去调用B的目标方法来实现目标逻辑。而A的作用则是在调用B方法的前后提供一些准备和善后的工作。即A虽然是“伪军”,但它可以增强B,在调用B的方法前后都做些其他的事情。Spring AOP就是使

XHY的博客 1749

代理模式---静态代理和动态代理

代理模式:给某一个对象提供一个代理,并由代理对象来控制对真实对象的访问。代理模式是一种结构型设计模式。代理模式角色分为 3 种:Subject(抽象主题角色):定义代理类和真实主题的公共对外方法,通常被设计成接口;RealSubject(真实主题角色):真正实现业务逻辑的类;Proxy(代理主题角色):用来代理和封装真实主题;代理模式的结构比较简单,其核心是代理类,为了让客户端能够一致性地对待真实对象和代理对象,在代理模式中引入了抽象层。如果根据字节码的创建时机来分类,可以分为和。

weixin_64975807的博客 1056

设计模式之代理模式的懂静态代理和动态代理

目录 1 概述 1.1 如何实现? 1.2 优点 1.3 缺点 1.4 适用场景 2 静态代理实现 3 JDK 动态代理实现 4 CGlib 动态代理实现 5 总结

赵广陆 778

代理模式之强制代理模式以及动态代理原理

1:强制代理模式         普通代理模式和强制代理模式是代理模式的其中俩个部分。对于这俩个代理模式,我们采用一个类似事情解释下:在网络上的代理服务器分透明代理和普通代理;对于透明代理来说,字如其意,就是这个代理服务器对用户来说是透明的,用户根本不知道这个服务器的存在。而普通代理则是用户需要自己手动去设置代理服务器的ip,很显然,对于这点上,用户必须知道代理服务器的存在。现在对号入座:代理模式中的强制代理类似网络上的代理服务器的透明代理,代理模式中的普通代理模式就类似网络上的代理服务器的普通代理。普通代

morethinkmoretry的专栏 4829

代理模式&动态代理

代理模式是开发中常见的一种设计模式,使用代理模式可以很好的对程序进行横向扩展。代理,顾名思义就是一个真实对象会存在一个代理对象,并且并且还可以在代理对象中进行额外操作的扩展。代理模式的特征是拥有接口、代理类、被代理类。并且代理类与被代理类同时实现该接口。代理类与被代理类之间通常存在一定关联,设计时会在代理类中注册一个被代理类的对象用于调用代理类的方法。这也印证了代理对象依然是执行的真实对象的方法代理模式又分为静态代理和动态代理。

yuqu1028的博客 489

3_代理模式(动态代理JDK原生和CGLib)

代理模式概念 静态代理到动态代理过程 动态代理CGlib 动态代理JDK原生的 代理模式优缺点和使用注意

java之书-资源 746

基于代理模式:深入了解静态代理和动态代理

代理模式是设计模式中结构型模式通过一个 “代理对象” 来间接访问 “目标对象”,并在访问前后添加额外操作,从而实现对目标对象的控制或功能增强。今天我们从代理模式开始了解,基于代理模式去深入了解静态代理模式和动态代理模式。// 抽象主题:定义用户服务的接口// 添加用户// 删除用户总的来说,代理模式通过 “代理对象” 实现对 “目标对象” 的间接访问,核心价值是控制访问 + 功能增强。静态代理简单但冗余,适合简单场景;

2401_85973273的博客 1261
上一篇: 代理模式(Proxy Pattern):静态代理 - 最易懂的设计模式解析
下一篇: 整理最全java面试题二(附答案,欢迎指正)
GraceJava
博客等级 码龄10年 131粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值