java设计模式---- 适配器模式,手写SpringMVC适配器设计模式

Java设计模式之<适配器模式>  java的设计模式可分为:创建型模式、结构性模式、行为型模式三类。适配器模式(Adapter Pattern)是一种 结构型设计模式,用于在两个不兼容的接口之间建立桥梁,使它们可以协同工作。它通常用于让已有的类与新接口兼容,而无需修改原有代码。实现方式分为对象适配器(基于组合)、类适配器(基于继承)、接口适配器(基于抽象类)三种。 阅读详情
主文章(所有java设计模式的目录)
https://blog.youkuaiyun.com/grd_java/article/details/122252696
源码位置
码云:https://gitee.com/yin_zhipeng/design_mode.git
GitHub:
学习设计模式前必须知道的东西
  1. 看待设计模式,要站在更大的角度(代码重用性、可读性、可扩展性、可靠性、程序高内聚,低耦合)来综合考虑看待,而不是功能实现的角度看待,不要觉得实现一个功能没必要这么麻烦
  1. 文章中给出的设计模式类图都是标准的实现方式,并不一定要完全遵守标准,所以只要设计思想符合,一个设计模式有多种实现方式,尤其是看别人源码的时候,不要用标准类图死扣

1. 适配器模式(Adapter Pattern)

  1. 又名缺省适配器模式,将某个类的接口转换为客户端期望的另一个接口表示,主目的是兼容性,让原本接口不匹配不能一起工作的两个类,可以协同工作。别名为包装器(Wrapper)
  2. 适配器模式属于结构型模式
  3. 分三类:类适配器、对象适配器、接口适配器模式
  4. 通俗的讲就是将一个对象,通过不同适配器,转换为不同的对象,比如220V市电,通过各种变压器,转换为不同直流电
工作原理
  1. 适配器模式:将一个类的接口转换成另一种接口,让原本接口不兼容的类可以兼容
  2. 用户角度看不到被适配者,是解耦的
  3. 用户调用适配器转化出来的目标接口方法,适配器再调用被适配者的相关接口方法
  4. 用户收到反馈结果,感觉只是和目标接口交互
    在这里插入图片描述

1. 类适配器

  1. Adapter类(适配器),继承src类(源类),实现dst类接口(目标),完成src->dst的适配
  2. 假设src就是墙上的插座,220v交流电。dst,是目标,比如手机,我们需要5v直流电
  3. 那么Adapter就是充电器,将220v交流电适配为5v直流电,给手机使用
    在这里插入图片描述
注意事项
  1. java是单继承机制,类适配器需要继承源类这一点是一个缺点(如果我们将适配器也抽象成一个接口,然后传入具体实现类指定适配器是否可行呢?也OK)
  2. 源类,会在类适配器中暴露出来,增加使用成本
  3. 不过继承了源类,根据需求,重写源类方法,灵活性反而增强了
类图:com/yzpnb/design_mode/adapter_pattern/class_adapter/uml/Phone.puml

在这里插入图片描述

代码:com/yzpnb/design_mode/adapter_pattern/class_adapter/phone包下
  1. 220V市电,源对象,很多产品不能直接使用它
    在这里插入图片描述
  2. 5V直流电,目标对象,手机充电时可以使用的对象(不做具体实现,适配器将其转换)
    在这里插入图片描述
  3. 适配器,继承220V类,我们直接可以获取它,实现5V接口,接口中规定我们要将220V适配成什么样
    在这里插入图片描述
  4. 有了适配器,就可以给手机充电了
    在这里插入图片描述
  5. 使用者,我们需要先选择充电器,然后给手机充电
    在这里插入图片描述

2. 对象适配器(常用)

  1. 和类适配器基本相同,对适配器类做了一些修改
  2. 适配器类不再继承源类了,而是持有源类的实例,解决兼容性问题
  3. 也就是持有src类,实现dst类接口,完成src->dst的适配
  4. 根据“合成复用原则”,系统中尽量使用关联关系来替代继承关系,因此大部分结构型模式都是对象结构型模式
类图:com/yzpnb/design_mode/adapter_pattern/object_adapter/uml/Phone.puml

在这里插入图片描述

代码:com/yzpnb/design_mode/adapter_pattern/object_adapter/phone包下
  1. 修改适配器类
    在这里插入图片描述
  2. 其它都无需变动
    在这里插入图片描述

3. 接口适配器

  1. 当不需要去全部实现接口提供的方法时,可以先设计一个抽象类实现接口,并为该接口中每个方法提供一个默认实现(空方法),那么该抽象类的子类就可以有选择地覆盖父类的某些方法来实现需求
  2. 适用与一个接口不想使用其所有的方法的情况
  3. 更加抽象的概念了,连适配器类都不需要了
程序:com/yzpnb/design_mode/adapter_pattern/interface_adapter/phone包下
  1. 假设我在5V的接口中,添加两个方法,漏电和停电
    在这里插入图片描述
  2. 抽象类,继承,空实现方法,这样其他类就可以有选择的使用这些方法
    在这里插入图片描述
  3. 需要使用某些方法的类,直接继承实现,或者使用匿名内部类
    在这里插入图片描述

2. 用到适配器模式的源码

Spring MVC的HandlerAdapter,使用到了适配器模式
  1. 使用HandlerAdapter的原因是,处理器类型不同,有多重实现方式,调用方法是不确定的,若直接调用Controller方法,需要调用的时候就得不断使用if else进行判断是哪一子类,如果后面要扩展Controller,就得修改原来代码,违背OCP(开闭)原则
  2. 先看一下SpringMVC请求Controller流程,类图:com/atguigu/spring/UML/SpringMVC请求流程.puml
    在这里插入图片描述
  3. 如何使用适配器模式的呢?(实在不想画这张类图了,太麻烦了)
  1. 进入DispatcherServlet
    在这里插入图片描述
  1. MVC使用doDispatch方法处理来到的请求,然后通过getHandler方法,获取我们请求的Handler,拿到控制器(mappedHandler映射Controller)
    在这里插入图片描述
  1. 拿到控制器(Controller映射)后,通过getHandlerAdapter方法获取相符合的适配器(不同的Handler,需要不同的适配器去调用相关方法)
    在这里插入图片描述
  1. 先看看getHandlerAdapter怎么返回的,最后再看看返回的到底是什么
    在这里插入图片描述
  1. 发现是一个for循环,依次遍历所有适配器,然后通过supports()方法判断,是否是一个类型,如果是就是返回适配器
    在这里插入图片描述
    在这里插入图片描述
  1. HandlerAdapter接口,看看具体有哪些适配器
    在这里插入图片描述
  1. 拿到适配器后,又干了什么呢?原来是通过适配器,调用handle方法,返回ModelAndView(通过适配器调用controller的方法)。
    在这里插入图片描述

3. 手写SpringMVC适配器设计模式,获取对应Controller

  1. Spring 定义了一个适配接口,使得每一种Controller有一种对应的适配器实现类
  2. 适配器代替controller执行相应的方法
  3. 扩展Controller时,只需要增加一个适配器类就完成了SpringMVC的扩展了
类图:com/atguigu/spring/springmvc/uml/springmvc.puml

在这里插入图片描述

  1. 好处,如果我们添加一个Controller种类,添加一个对应适配器种类,对于我们使用的DispatchServlet,没有任何影响
代码:com/atguigu/spring/springmvc包下
  1. 先把需要适配的东西Controller高出来(Controller是5V直流电,我们想要适配成这个样子)
    在这里插入图片描述
//多种Controller实现  
public interface Controller {

}
//不同的适配种类
class HttpController implements Controller {
	public void doHttpHandler() {
		System.out.println("http...");
	}
}

class SimpleController implements Controller {
	public void doSimplerHandler() {
		System.out.println("simple...");
	}
}

class AnnotationController implements Controller {
	public void doAnnotationHandler() {
		System.out.println("annotation...");
	}
}

  1. 把适配器搞出来(就是充电器),有多种适配器
    在这里插入图片描述
///定义一个Adapter接口 
public interface HandlerAdapter {
	public boolean supports(Object handler);

	public void handle(Object handler);
}

// 多种适配器类
class SimpleHandlerAdapter implements HandlerAdapter {

	public void handle(Object handler) {
		((SimpleController) handler).doSimplerHandler();
	}

	public boolean supports(Object handler) {
		return (handler instanceof SimpleController);
	}

}

class HttpHandlerAdapter implements HandlerAdapter {

	public void handle(Object handler) {
		((HttpController) handler).doHttpHandler();
	}

	public boolean supports(Object handler) {
		return (handler instanceof HttpController);
	}

}

class AnnotationHandlerAdapter implements HandlerAdapter {

	public void handle(Object handler) {
		((AnnotationController) handler).doAnnotationHandler();
	}

	public boolean supports(Object handler) {

		return (handler instanceof AnnotationController);
	}

}
  1. DispatchServlet
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
import java.util.ArrayList;
import java.util.List;

public class DispatchServlet {

	//保存了所有适配器
	public static List<HandlerAdapter> handlerAdapters = new ArrayList<HandlerAdapter>();

	//适配器放进去
	public DispatchServlet() {
		handlerAdapters.add(new AnnotationHandlerAdapter());
		handlerAdapters.add(new HttpHandlerAdapter());
		handlerAdapters.add(new SimpleHandlerAdapter());
	}

	//首先调用的就是doDispatch方法
	public void doDispatch() {

		// 此处模拟SpringMVC从request取handler的对象,
		// 适配器可以获取到希望的Controller
		 HttpController controller = new HttpController();
		// AnnotationController controller = new AnnotationController();
		//SimpleController controller = new SimpleController();
		// 得到对应适配器
		HandlerAdapter adapter = getHandler(controller);
		// 通过适配器执行对应的controller对应方法
		adapter.handle(controller);

	}

	//根据Controller获取适配器,SpringMVC中是映射对象mappedHandler
	public HandlerAdapter getHandler(Controller controller) {
		//遍历:根据得到的controller(handler), 返回对应适配器
		for (HandlerAdapter adapter : this.handlerAdapters) {
			if (adapter.supports(controller)) {
				return adapter;
			}
		}
		return null;
	}

	//这里我们人为直接调用doDispatch()
	public static void main(String[] args) {
		new DispatchServlet().doDispatch(); // http...
	}
}
设计模式之适配器模式 java 23种设计模式 适配器模式,详细源码分析请看博客: http://blog.youkuaiyun.com/github_22022001/article/details/41516545 立即下载

相关推荐

【论文详解】AlphaGenome——Sequence-to-Multimodal-Genome-Track

**AlphaGenome** 是由 **Google DeepMind** 于 2025 年 6 月发布的突破性 AI 模型,专门用于预测非编码区遗传变异的功能效应。该模型采用受 **U-Net** 启发的卷积架构结合 **Transformer** 模块,创新性地解决了传统模型在输入序列长度与预测分辨率之间的核心矛盾——能够在 **1M 碱基对的超长上下文** 下实现 **单核苷酸分辨率** 的精准预测。

zwhszdx的博客 960

spring中的-适配器模式

在Spring框架中,使用了许多设计模式,其中适配器模式是比较常用的一种。在使用 Spring 框架进行 JMS 消息监听时,需要将消息监听器适配为一个带有固定方法名的处理器。这些是 Spring 框架中使用适配器模式的几个典型例子,它们都在不同场景下完成了类型适配、方法适配等功能。在 Spring MVC 框架中,用户提交的表单数据需要进行类型转换、格式化等操作后才能进行进一步处理。在处理时,只需要将用户提交的表单数据和对应的 JavaBean 绑定到。适配器中,即可完成参数适配工作。

_abab的专栏 744

意图识别和纠错问题

可想而知,错误的意图识别会带来多大的负面影响。基于词典,就是对用户query内容和词典内容进行比对,比较常见的方式是序列标注问题里用的最大逆向匹配,通过这种方式找到词典里的实体词,匹配触发了自然就有意图了,而在词典匹配的时候,不是使用链表之类的来构造匹配结构,而是使用搜索树的结构,这种匹配的复杂度最低,速度也快,两者结合,其速度甚至比很多模型要快得多(基本上1ms以内就能完成),fasttext速度非常快,但是textcnn之类的其实就已经达到ms级别以上,bert甚至在10ms级别。

TURING.DT 4573

Android适配器模式,手写ListView体验适配器

​ 适配器模式 (Adapter Pattern) 是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。

weixin_46039528的博客 1627

别再瞎调参数了!分子动力学模拟新手必看的力场选择与验证实战指南

本文为分子动力学模拟新手提供力场选择与验证的实战指南,详细解析主流力场特性及适用场景,并通过水分子案例演示完整的验证流程。文章重点对比SPC/E、TIP3P和OPLS-AA三种力场在GROMACS中的表现,帮助读者避免常见参数调整误区,提升模拟准确性。

weixin_26934905的博客 426

【脑电信号】脑电信号EEG形态学滤波处理【含Matlab源码 4023期】

脑电信号EEG形态学滤波处理 完整的代码,包运行;运行操作视频见优快云资源!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 823

Java设计模式之单例模式

Java设计模式之单例模式

cssweb_sh的博客 238

环保 HJ212协议解析

由于是做环保相关的,有时需要对212协议进行拆包和解包。HJ212协议是一种字符串协议,数据传输通讯包主要由包头、数据段长度、数据段、CRC校验、包尾组成,其中“数据段”内容包括请求编码、系统编码、命令编码、密码、设备唯一标识、总包数、包号、指令参数。请求编码为请求的时间戳,系统编码ST统一规定为22,命令编码CN为该数据包的时间类型,访问密码、设备唯一标识在对接时由平台提供,指令参数为数据内容。通讯协议的数据结构如图4所示。 图4 通讯协议的数据结构 6.1.1通讯包结构组成 名称 类型 长度

ccf19881030的专栏 2万+

精讲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

把 ABAP ALE Change Pointers 讲透:从 CDHDR/CDPOS 到 BDCP2,再到 RBDMIDOC 的自动分发链路

摘要:SAP ALE Change Pointers机制在系统集成中实现业务变更与数据分发的解耦。它记录业务对象变更(如SAP主数据修改),但不立即发送,而是由后续分发逻辑决定发送时机和方式。该机制包含两层:Change Documents记录审计级变更明细,Change Pointers标记需分发的关键变更。配置核心包括全局开关、消息类型激活和字段选择。典型应用如零售价格条件变更自动推送至POS系统,通过BDCP2表存储待处理队列,由RBDMIDOC程序定时评估生成IDoc。运维需关注定期清理和性能优化,

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 209

单反相机物镜设计[DG-10]

REAR(要打在像面,操作数要找像面对应位置15):以透镜单位表示的真实光线径向坐标,波长由Wave定义,参见“Hx、Hy、Px和Py”。最小玻璃厚度最小不能小于semi-dia的1/10,要根据layout看有没有过厚过薄,反复调节。PROD:两个操作数的乘积(操作#1 X操作#2)。3x4就是57.3x0.41=23.5。拦光一般在第一面和最后一面操作,减少边缘无用光线。光阑面与镜面贴近,要调距离,同时设置光阑像差。后截距是指从镜头后表面到焦点的距离。CONS:弧度转为角度。镜头相互嵌入,有错误。

weixin_72050316的博客 600

手写常见23设计模式

【1】Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides.设计模式。如果你要开发一个框架,系统,那一定要考虑设计模式,使你的框架有松散的结构、好的扩展性、低的耦合性以及较好的易用性。常见业务开发可适当考虑设计模式,从而使自己开发的业务有一定的扩展性;手写了常见23种设计模式存在github仓库,以供指正、参考、借鉴。设计模式,应该从场景和业务出发,做出合理的选择。脚本之流无需考虑设计模式,多为一次性使用;

海若_matrix的博客 486

【23】C++实战篇——C++报错:LNK2001:无法解析的外部符号 ,LNK2019: 无法解析的外部符号,原因分析及解决方法

该文分析了VS项目中出现的"无法解析的外部符号"LNK2001/LNK2019错误。问题表现为跨项目共享变量时,Projector项目无法解析Line项目中声明的外部变量ImgSavePath和ImgFormat。原因在于头文件声明了变量但未包含实现的源文件。解决方法是将getLine.cpp文件添加到Projector项目中。文章还总结了两种错误代码的区别:LNK2001通常对应变量缺失,LNK2019对应函数缺失。最后列出了具体的报错信息,包括无法解析的变量和函数符号。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 2008

设计模式——适配器模式

● 适配器模式是将某个类的接口转化成客户端需要的另一个接口表示,主要的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper)● 适配器模式属于结构型模式● 主要分为三类:类适配器模式、对象适配器模式、接口适配器模式①、可以让任何两个没有关联的类一起运行。②、提高了类的复用。③、增加了类的透明度。④、灵活性好。①、过多地使用适配器,会让系统非常凌乱,不易整体进行把握。

程序猿进阶 1994

android 蓝牙通讯demo

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

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Java设计模式-适配器模式

介绍Java设计模式之一的适配器模式,适配器模式分为三种,分别是类适配器模式,对象适配器模式,接口适配器模式。

m0_62946761的博客 4845

STM32F407中文手册

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

【源码分析设计模式 10】SpringMVC中的适配器模式

一、基本介绍 适配器这个词我们应该很熟悉,天天都在使用,手机充电时,电源线头头就叫电源适配器,干什么用的呢?把220V电压转换成手机充电时使用的电压,那么适配器是不是很好理解了,下面看一下定义。 Adapter适配器模式,将一个类的接口转换成客户希望的另外一个接口。使原本由于接口不兼容而不能一起工作的那些类可以一起工作了。 适配器模式有“类适配器”和“对象适配器”两种不同的形式。 二、适配器模式的结构 1、目标(Target) 定义一个客户端使用的特定接口。 2、客户端(Client) 使用

学Java,找哪吒 9431

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

JAVA设计模式之适配器模式

适配器模式(Adapter Pattern)是一种结构型设计模式,用于将一个类的接口转换成另外一个接口,从而使原本不兼容的接口可以一起工作。适配器模式通常用于系统间接口的兼容性问题,可以将已有的接口适配成另一个接口,以满足客户端的需求。下面以一个示例来说明适配器模式的应用。假设我们有一个接口Target,它定义了一个request然后我们有一个现有的类Adaptee,它定义了一个不兼容的现在我们需要将Adaptee类的接口适配成Target接口,以便客户端可以使用它。首先,我们定义一个适配器类。

u011077231的专栏 2837

设计模式---适配器模式

适配器模式适配器概念介绍介绍角色工作原理3种适配器模式类适配器模式演示对象适配器模式对象适配器的优点接口适配器模式综合小案例---使用类适配器模式power--带转换的电压adapter--适配器FindAdapter--寻找合适的适配器测试适配器模式总结主要优点主要缺点适用场景spring MVC中的适配器模式springMVC处理请求流程请求处理方法中适配器模式部分源码探究总结参考文章 适配器概念介绍 1、不同国家的插座是有区别的,如果我们去国外旅游,需要带上国外的插头转换器,来能兼容国外的插座; 2

m0_53157173的博客 5178

适配器模式以及在 SpringMVC 中的应用

文章目录适配器模式基本介绍适配器模式工作原理类适配器模式实现类适配器模式的注意事项和细节对象适配器模式实现对象适配器模式的注意事项和细节接口适配器模式基本介绍适配器模式在 SpringMVC 框架中的应用与源码分析 适配器模式 基本介绍 适配器模式是将某个类的接口转换成客户端期望的另一个接口表示,主要的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作,其别名为包装器(Wrappe...

Woo_home的博客 2667

系列二十五、Spring设计模式之适配器模式

适配器模式(Adapter Pattern)用于兼容不相关的接口之间,类似于一个桥梁,它结合了两个独立接口的功能,这种类型的设计属于结构型模式,为了方便大家伙的理解,我举个例子,例如:国产的电源适配器标准输出电压是220v,美国人购买该电源适配器后显然无法直接使用(美国标准输出电压110v,PS:不怕把电脑充冒烟可以直接使用!

仰望星空,脚踏实地!安全感是自己给的,努力才是一辈子的安全感。 2488

适配器模式(SpringMVC源码分析)

现实生活中的例子 1、不同国家的插座是有区别的,如果我们去国外旅游,需要带上国外的插头转换器,来能兼容国外的插座; 2、手机的耳机孔有圆头和扁头,如果扁头的耳机孔想接圆头的耳机就需要一个耳机的转换器; 上述所说的转换器,其实就是适配器;它是用来做兼容的; 基本概念 适配器模式(Adapter Pattern):将某个类的接口转换成客户端期望的另一个接口,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper); 适配器模式属于结构型模式; 主要分为三类:类适配器模式、对象适配

qq_33732195的博客 2676

java设计模式学习之【适配器模式】

这篇教程不仅提供了适配器模式的理论基础,还通过具体的Java代码示例展示了如何实现和应用这种模式。简单理解,通俗易懂

qq_33129875的博客 1521

适配器模式详解

适配器模式 (Adapter Pattern) 将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为包装器(Wrapper)适配器模式属于结构型模式类适配器模式接口适配器模式对象适配器模式一些书籍称为:适配器模式(Default Adapter Pattern)或缺省适配器模式。核心思路:当不需要全部实现接口提供的方法时,可先设计一个抽象类实现接口,并为该接口中每个方法提供一个默认实现(空方法)

沉梦听雨的博客 1159

SpringMvc中使用到的适配器模式

此处采用了适配器模式, 由于Controller的类型不同,有多重实现方式,那么调用方式就不是确定的,如果需要直接调用Controller方法,需要在代码中写成如下形式:  Java代码   if(mappedHandler.getHandler() instanceof MultiActionController){      ((MultiActionCont

bu123dian的专栏 5086

图解Java设计模式之适配器模式

图解Java设计模式之适配器模式现实生活中的适配器例子适配器模式基本介绍适配器模式工作原理类适配器模式类适配器模式注意事项和细节对象适配器模式对象适配器模式注意事项和细节接口适配器模式适配器模式在SpringMVC框架应用的源码分析适配器模式的注意事项和细节 现实生活中的适配器例子 泰国插座用的是两孔的(欧标),可以买个多功能转换插头(适配器),这样就可以使用了。 适配器模式基本介绍 1)适配器...

不一样的花朵的博客 519
上一篇: java设计模式---- 建造者模式
下一篇: java设计模式---- 桥接模式
ydenergy_殷志鹏
博客等级 码龄7年 5886粉丝 543原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

ydenergy_殷志鹏

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

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

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

打赏作者

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

抵扣说明:

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

余额充值