首页 > 其他分享 >设计模式-代理模式

设计模式-代理模式

时间:2024-11-28 20:58:33浏览次数:15  
标签:房东 委托 代理 接口 模式 2.2 2.1 设计模式

概念:代理模式是结构型模式之一,代理对象代替委托对对象完成业务功能,在委托对象完成功能前后可以做增强或限制。最典型的例子如:aop底层原理
现实中的例子如:如房屋中介和房东的关系:房东提供房源,中介去进行售卖和出租,期间房东不做任何业务功能,但是最终本质上还是售卖和出租的是房东的房屋,是对房东房子的处理。
代理模式的特点:第一,代理类和委托类要有共同的父类或者接口。第二,真正执行业务的是委托类,代理类只是在执行业务先后做增强或限制。
1.静态代理
执行代码例子:房屋出租
共同的接口:房子接口

委托类:房东

代理列:中介

测试:test

小结:
静态代理,在运行前,代理类要代理的方法已经编译并生成字节码文件,代理类和委托类的关系已经确定。如果委托类需要执行很多的业务方法,代理就复杂了,而且不能进行多代理操作,一个代理基本只能代理一个委托。
2.动态代理
2.1.JDK代理
2.1.1.主要类
2.1.1.1.Proxy
Proxy提供了创建动态代理类和实例的静态方法,它也是由这些创建的所有动态代理类的超类(父类)。
newProxyInstance(ClassLoader loader,类<?>[] interfaces,InvocationHandler h) 返回指定接口的代理类的实例,改接口将方法调用分派给指定的调节处理系统。
2.1.1.2.InvocationHandler接口
InvocationHandler是由代理实例的调用处理程序实现的接口。每个代理实例化都有一个关联的调用处理程序。当在代理实例上调用方法时,方法调用将被编译并分派到其调用处理程序的invoke方法。
2.2.JDK通用代理类

2.2.CG(Code Generation)lib代理
2.2.2.主要类
2.2.2.1.Enhancer
增强器,使用它创建委托类的子类做代理
2.2.2.2.MethodInteceptor
方法拦截器接口,实现接口的类重新intercept方法用来在委托类的执行方法的前后做处理。
2.2.3.编写通用cglib代理类
引入依赖

<dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>3.3.0</version>
        </dependency>


2.3.JDK和CGlib代理的区别
JDK只能代理有接口的类,cglib既能代理接口的类,还能代理普通类。
2.4.小结
动态代理,在运行前,代理类不知道要代理的方法是什么,不可能编译并生成字节码文件,代理类和委托类的关系不能确定,在运行时才确定。如果委托类需要执行业务方法很多,代理类不会复杂。

标签:房东,委托,代理,接口,模式,2.2,2.1,设计模式
From: https://www.cnblogs.com/xiaomubupi/p/18574502

相关文章

  • 【java编程】双亲委派模式
    双亲委派模式图文解释一个类加载器查找class和resource时,是通过委托模式进行的,它首先判断这个class是不是已经加载成功,如果没有的话它并不是自己进行查找,而是先通过父加载器,然后递归下去,直到BootstrapClassLoader,如果Bootstrapclassloader找到了,直接返回,如果没有找到,则一级一......
  • 设计模式学习之——策略模式
    策略模式(StrategyPattern)是一种行为型设计模式,它允许定义一系列算法,并将每个算法封装在独立的类中,使它们可以互相替换。策略模式通过将算法的使用与算法的实现分离,使得算法可以独立于客户端而变化。一、策略模式的核心思想策略模式的核心思想是面向接口编程,而不是面向实现编......
  • 高性能反向代理Nginx 安装配置‌配置指导
    Nginx是一款高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。在Web项目应用中是构建Web服务器的一个重要工具,通过Nginx实现反向代理服务,实现负载均衡,也可配合使用Lua脚本实现其他各种复杂的服务器特性,以下是Nginx的下载、安装、配置及启动的步骤。1.......
  • 基于主从博弈的智能小区代理商定价策略及电动汽车充电管理(Matlab代码实现)
     ......
  • (航天民芯)代理 MT3608 SOT-23-6 DC-DC电源芯片
    产品描述MT3608是一个恒定频率、6引脚SOT23电流模式升压转换器,旨在用于小型、低功耗的应用。MT3608的开关频率为1.2MHz,并允许使用2毫米或更低高度的微型、低成本的电容器和电感器。内部软启动导致注入电流小,延长电池寿命。MT3608的特点是在光负载下自动切换到脉冲频率调制模式......
  • 探索空间自相关:揭示地理数据中的隐藏模式
    目录一、什么是空间自相关?  类型二、空间自相关的数学基础  空间加权矩阵三、度量空间自相关的方法  1.全局自相关  2.局部自相关四、空间自相关的实际应用五、Python实现空间自相关分析  1.数据准备  2.计算莫兰指数  3.局部自......
  • 代码精简之路-责任链模式
    前言常说c#、java是面向对象的语言,但我们平时都是在用面向过程的思维写代码,实现业务逻辑像记流水账一样,大篇ifelse的判断;对业务没有抽象提炼、代码没有分层。随着需求变化、功能逐步拓展、业务逻辑逐渐复杂;代码越来越长、ifelse嵌套越来越多,代码会变成程序员都厌恶的"屎山"。这......
  • 未成年人模式护航,保障安全健康上网
    为保护未成年人的上网环境,预防未成年人沉迷网络,帮助未成年人培养积极健康的用网习惯,HarmonyOSSDK提供未成年人模式功能,在华为设备上加强对面向未成年人的产品和服务的管理。场景介绍(应用跟随系统未成年人模式状态变化)1.查询系统状态:建议应用跟随系统未成年人模式状态切换,随系......
  • 设计模式概述
    设计模式(Designpattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码......
  • 设计模式--原型模式及其编程思想
    原型模式(PrototypePattern)原型模式的核心思想是通过复制(克隆)现有对象来创建新对象。原型模式通常涉及两个角色:原型对象和具体原型对象。原型对象是需要被复制的对象,而具体原型对象是实现了克隆方法的原型对象。在Java中,原型模式通常通过实现Cloneable接口和重写clone()方法来......