代理(Proxy)模式

kube-proxy的三种代理模式 前言 Service是k8s中资源的一种,也是k8s能够实现减少运维工作量,甚至免运维的关键点,我们公司的运维都要把服务搭在我们集群里,接触过的人应该都能体会到其方便之处。Service能将pod的变化屏蔽在集群内部,同时提供负载均衡的能力,自动将请求流量分布到后端的pod,这一功能的实现靠的就是kube-proxy的流量代理,一共有三种模式,userspace、iptables以及ipvs。 ... 阅读详情

代理(Proxy)模式介绍

作用:通过代理可以控制访问某个对象的方法,在调用这个方法前做前置处理,调用这个方法后做后置处理。(即: AOP的微观实现!)

核心角色

  • 抽象角色(接口):定义公共对外方法

  • 真实角色(周杰伦):实现抽象角色,定义真实角色所要实现的业务逻辑,

  • 代理角色(代理人):实现抽象角色,是真实角色的代理,通过调用真实角色的方法来完成业务逻辑,并可以附加自己的操作。

代理模式
        1)静态代理
            角色:
                公共接口:Star
                真实角色:RealStar(周杰伦.唱歌)
                代理角色:ProxyStar(代理人.面谈.订机票.签合同.[调周杰伦唱歌].收尾款)
                客户类:Client(小孩.调代理人)

            缺陷:1.大量代码重复 2.只能代理Star类型的对象
        2)jdk动态代理
            角色:
                公共接口:Star
                真实角色:RealStar(周杰伦.唱歌)
                代理工厂:ProxyFactroy{生成ProxyStar(宋吉吉.面谈.订机票.签合同.[调周杰伦唱歌].收尾款)}
                客户类:Client(小孩.调代理人)

        3)Cglib动态代理
            cglib和jdk动态代理的区别:cglib真实角色没有接口

静态代理

抽象角色(公共接口)
public interface Star {
	/**
	 * 面谈
	 */
	void confer();
	/**
	 * 签合同
	 */
	void signContract();
	/**
	 * 订票
	 */
	void bookTicket();
	/**
	 * 唱歌
	 */
	void sing();
	/**
	 * 收钱
	 */
	void collectMoney();
}
真正角色(周杰伦)
public class RealStar implements Star{


    public void confer() {

    }


    public void signContract() {

    }


    public void bookTicket() {

    }


    public void sing() {
        System.out.println("静态代理方法周杰伦:天青色等烟雨,而我在等你...");
    }


    public void collectMoney() {

    }
}
代理角色(经纪人)
public class ProxyStar implements Star{


    private Star Star;

    public ProxyStar(Star Star) {
        this.Star = Star;
    }
    public void bookTicket() {
        System.out.println("ProxyStar.bookTicket()");
    }

    public void collectMoney() {
        System.out.println("ProxyStar.collectMoney()");
    }

    public void confer() {
        System.out.println("ProxyStar.confer()");
    }

    public void signContract() {
        System.out.println("ProxyStar.signContract()");
    }

    public void sing() {
        Star.sing();
    }
}
测试(Client)
public class Client {
    public static void main(String[] args) {
        Star star = new ProxyStar(new RealStar());
        star.confer();
        star.signContract();
        star.bookTicket();
        star.sing();
        star.collectMoney();
    }
}
测试结果 

静态代理的缺点
  1. 代理类和实现类实现了相同的接口,这样就出现了大量的代码重复。

  2. 代理对象只服务于一种类型的对象。如果要服务多类型的对象,例如代码是只为UserService类的访问提供了代理,但是还要为其他类如DeptService类提供代理的话,就需要我们再次添加代理DeptService的代理类。

jdk动态代理

抽象角色(公共接口)
public interface Star {
    /**
     * 唱歌
     */
    void sing();
}
真正角色(周杰伦)
//真实角色(周杰伦)
public class RealStar implements Star{
    @Override
    public void sing() {
        System.out.println("动态代理方法周杰伦:天青色等烟雨,而我在等你...");
    }
}
代理角色(经纪人)---->代理工厂
//代理类工厂
public class ProxyFactory {
    //优点:此时可以代理任意类型的对象
    //真实角色(周杰伦)
    private Object realObj;

    public ProxyFactory(Object realObj) {
        this.realObj = realObj;
    }
    //获得代理对象
    public Object getRealObj() {
        /**
         * Proxy:作用创建代理对象
         *      ClassLoader loader:类加载器
         *      Class<?>[] interfaces:真实角色实现的接口,根据接口生成代理类
         *      InvocationHandler h:增强的逻辑,即如何代理(代理人要做的事)
         */
       return Proxy.newProxyInstance(
               realObj.getClass().getClassLoader(),
               realObj.getClass().getInterfaces(),
               new InvocationHandler() {
                   @Override
                   public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                       System.out.println("真正的方法执行前!");
                       System.out.println("面谈,签合同,预付款,订机票");
                       Object result = method.invoke(realObj, args);
                       System.out.println("真正的方法执行后!");
                       System.out.println("收尾款");
                       return result;
                   }
               }
       );
    }
}
测试(Client)
public class Client {
    public static void main(String[] args) {
        //获得代理对象
        Star star = (Star) new ProxyFactory(new RealStar()).getRealObj();
        star.sing();
    }
}
测试结果 

代理(Proxy)模式 文章目录代理(Proxy)模式1. 意图2. 别名3 动机4. 适用性5. 结构6. 参与者7. 协作8. 效果9. 实现10. 代码示例11. 已知应用12. 相关模式13. Q&A14. 设计原则口袋15. 参考文献 代理(Proxy)模式 隶属类别——对象结构型模式 1. 意图 对其他对象提供一种代理以控制对这个对象的访问。 2. 别名 Surrogate(谷歌翻译结果有点尴尬。)... 阅读详情

相关推荐

代理模式(proxy)

代理模式(proxy) 代理模式:为其他对象提供一种代理以控制对这个对象的访问。 代理模式的应用 一、远程代理,也就是为了一个对象在不同的地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实。 二、虚拟代理,是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。这样可以达到性能最优化。 三、安全代理,用来控制真实对象访问时的权限。 四、智能指引,是指...

奔跑_蜗牛 2886

代理模式(Proxy)

设计模式系列 Proxy代理模式——对象结构模式 1.意图 为其他对象提供一种代理以控制对这个对象的访问。 2.适用性 在需要用比较通用和复杂的对象指针代替简单的指针的时候,使用Proxy模式。 1)远程代理(Remote Proxy)为一个对象在不同的地址空间提供局部代表。 2)虚代理(Virtual Proxy)根据需要创建开销很大的对象。 3)保护代理(Protecti...

行走 897

【设计模式】--代理模式 (Proxy模式)

在软件系统中,我们无时不在跨越障碍,当我们访问网络上一台计算机的资源时,我们正在跨越网络障碍;当我们去访问服务器上数据库时,我们又在跨越数据库访问障碍,同时还有网络障碍。跨越这些障碍有时候是非常复杂的,如果我们更多的去关注处理这些障碍问题,可能就会忽视了本来应该关注的业务逻辑问题,Proxy模式有助于我们去解决这些问题。 生活中的例子:       代理模式提供一个中介以控制对这个对象

十年磨一剑,沉淀…… 2130

设计模式 —— Proxy 代理模式

简介 Proxy代理模式是一种结构型设计模式。通过代理模式可以实现程序之间的解耦,可以解决在直接访问对象时带来的程序之间耦合度增大的问题。 按照代理的创建时期,代理类分为两种: 静态代理:在编译期,手动创建代理类,而不是由编译器生成代理类。 动态代理:在运行期,运用反射机制动态而生成代理类。 JDK代理基于接口接口 CGlib代理基于继承 静态代理 优点 静态代理可以将目标类和...

阿水的博客 275

zabbix监控主动模式+proxy代理服务

zabbix监控流程大致为由zabbix服务机向zabbix节点发送请求,建立链接,agent才会收集zabbix监控项数据,将数据发送给server,由server存放到其下属数据库中存储。但是有很多情况下,由于监控项过多,会导致server反映速度过慢,此时的主动模式消耗太多资源。被动模式就可以有效的解决这个问题,其工作模式大致就省略了server主动向agent发送请求这一步骤,由agent...

liuchuang11的博客 747

别再手动下单了!用Python+EasyTrader+同花顺,5分钟搞定你的第一个自动化交易机器人

本文详细介绍了如何使用Python和EasyTrader结合同花顺客户端快速构建自动化交易机器人。从环境配置到实战脚本编写,涵盖自动打新、条件单、跟单策略等核心功能,并分享性能优化与风险控制技巧,帮助投资者高效实现自动化交易。

weixin_30381317的博客 398

Proxy代理模式

[list] [*] [/list][code="java"] Proxy代理模式是一种结构型设计模式,主要解决的问题是:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。如下...

大米文子 8043

VCL for PHP,Konopka Signature VCL Controls (Raize Components 6.2.3) for Delphi 10.4

The Raize Components suite includes a variety of interface design tools for Delphi programming language and C ++ Builder, which includes over 125 VCL controls and over 100 different tools for creating...

weixin_42137539的博客 853

转 ——Proxy代理模式

Proxy代理模式是一种结构型设计模式,主要解决的问题是:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。如下图: 比如说C和A不在一个服务器上,A要频...

weixin_30294709的博客 139

MATLAB实战:5步搞定铣削稳定性叶瓣图(附完整代码解析)

本文提供了一份基于MATLAB的铣削稳定性叶瓣图实战指南。通过5个清晰步骤,从动力学原理出发,详细解析了利用半离散法构建稳定性判据、模块化代码设计、高效参数扫描及高级可视化的完整流程,并附有完整代码,帮助工程师快速预测和规避加工颤振,优化铣削工艺参数。

weixin_29197051的博客 194

通达信强龙趋势幅图指标 - 精准捕捉趋势,把握强势行情,多角度分析个股,强弱一目了然

STICKLINE(趋势>0 AND SJTJ,4.8,5.8,1.5,0),COLORYELLOW;STICKLINE(资金>0 AND SJTJ,1.2,2.2,1.5,0),COLOR0080FF;STICKLINE(异动>0 AND SJTJ,0,1,1.5,0),COLORFF0080;STICKLINE(异动=0 AND SJTJ,0,1,1.5,1),COLORGRAY;

Q1809330692的博客 5629

Proxy 代理对象结构模式

     Proxy 代理模式,为其它对象提供一种代理以控制这个对象的访问。客户代码与代理类打交道,而做实际工作的类隐藏在代理类背后。当调用代理类中的一个函数时,代理类仅转而去调用实现中相应的函数。      在需要用比较通用和复杂的对象指针代替简单的指针的时候,使用 Proxy 代理模式。Proxy 适用于以下情况: 1.远程代理(Remote Proxy)为一个对象在不同的地址空间提供局部

zhangcunli的专栏 1178

矿卡CMP 170HX的AI推理性能优化实战

GPU计算在现代AI推理中扮演着核心角色,其并行计算架构特别适合处理神经网络的大规模矩阵运算。通过CUDA指令集优化和计算管线重构,可以显著提升硬件利用率,这在边缘计算和带宽敏感型任务中尤为重要。以NVIDIA CMP 170HX矿卡为例,通过禁用FMA指令和框架适配优化,其FP32性能可提升15.9倍,在Qwen2.5-1.5B模型的4-bit量化推理中达到A100同架构78%的解码速度。这种优化技术不仅让淘汰矿卡重获新生,更为边缘AI部署提供了高性价比解决方案,特别适合7B以下量化模型部署和多路视频分析

weixin_30432579的博客 630

proxy代理模式

package proxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; class Logic{ public void logic(){ Dao dao = Factory.create(); ...

smartfirstme的专栏 156

国密系列算法简介

众所周知,为了保障商用密码的安全性,国家商用密码管理办公室制定了一系列密码标准,包括SM1(SCB2)、SM2、SM3、SM4、SM7、SM9、祖冲之密码算法(ZUC)那等等。其中SM1、SM4、SM7、祖冲之密码(ZUC)是对称算法;SM2、SM9是非对称算法;SM3是哈希算法。目前,这些算法已广泛应用于各个领域中,期待有一天会有采用国密算法的区块链应用出现。其中SM1、SM7算法不公开,调用该...

HardessGod的博客 5776

用 OP-TEE 给 AI 模型“上锁”:密文存储、TEE 解密放行、推理后销毁(实战可落地)

本文提出一种基于OP-TEE的AI模型保护方案,通过两级密钥体系确保模型静态存储为密文,运行时仅在TEE内解密。方案采用KEK+DEK架构,DEK永不出TEE,支持分块解密与可验证擦除。该方案能有效防御静态分析、应用层逆向等威胁,但需承认其物理级攻击的局限性。文章详细描述了端到端架构、文件格式设计及TA实现要点,包括密钥管理、分块解密策略和销毁机制,为设备侧AI部署提供了工程可行的安全解决方案。

Interview_TC的博客 289

kube-proxy代理模式详解

kube-proxy代理模式详解kube-proxy当前支持以下几种代理模式:1、userspace:最早的负载均衡方案,它在用户空间监听一个端口,所有服务通过iptables转发到这个端口,然后在其内部负载均衡到实际的Pod。该方式最主要的问题是效率低,有明显的性能瓶颈,不再推荐使用。比如说创建一个service,对应的IP:1.2.3.4,port:8888,kube-proxy随机选择的端口是32890,则会在iptables中追加。

nings666的博客 1124

31.华为路由器:PPPOE配置模拟实验及NAT配置

实验环境 pppoe-client上面的接口信息 [AR1]dis ip interface brief *down: administratively down ^down: standby (l): loopback (s): spoofing The number of interface that is UP in Physical is 2 The number of interface that is DOWN in Physical is 1 The number of interface

迷逝 8117

代理模式(Proxy模式)

所谓的代理,就是一个人或者一个机构代替另一个人或者另一个机构去做一些事情(类似于中介或者代理商)。

小石头 834

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Java —— Proxy 代理模式

Java —— 代理模式

Genius only means hard-working all one's life. 534

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

代理模式Proxy

public class MainActivity extends AppCompatActivity { TextView textView; Button button; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstan...

96

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

一、 代理(Proxy)模式

一、 代理(Proxy)模式 代理(Proxy)模式给某一个对象提供一个代理,并由代理对象控制对原对象的引用。   作用: 为其他对象提供一种代理以控制对这个对象的访问。 UML结构图: 抽象基类: 1)Subject:定义了Proxy和RealSubject的公有接口,这样就可以在任何需要使用到RealSubject的地方都使用Proxy. 解析: Proxy其

houpei8404的专栏 380

设计模式——Proxy代理模式

设计模式——Proxy代理模式Proxy代理模式 为其他对象提供一种代理,以控制这个对象的访问。代理对象起到中介作用,可以去掉功能服务或增加额外的服务。几种常见的代理模式:远程代理:为不同地理的对象提供局域网代表对象。虚拟代理:根据需要将资源消耗很大的对象进行延迟,真正需要的时候进行创建。保护代理:控制用户的访问权限。智能引用代理:提供对目标对象额外服务。 静态代理代理和被代理对象在代理之前是确定...

1024 1420
上一篇: 基于注解的IOC配置
下一篇: Spring AOP详解
涵冰...
博客等级 码龄4年 2438粉丝 243原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

涵冰...

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值