常用设计模式系列(七)—适配器模式

Java设计模式之<适配器模式>  java的设计模式可分为:创建型模式、结构性模式、行为型模式三类。适配器模式(Adapter Pattern)是一种 结构型设计模式,用于在两个不兼容的接口之间建立桥梁,使它们可以协同工作。它通常用于让已有的类与新接口兼容,而无需修改原有代码。实现方式分为对象适配器(基于组合)、类适配器(基于继承)、接口适配器(基于抽象类)三种。 阅读详情

常用设计模式系列(七)—适配器模式

第一节

前言

最近看到一个比较火的文案,“我认为,接受高等教育的目的是帮助家乡摆脱贫困,而不是摆脱贫困的家乡,生如蝼蚁当有鸿鹄之志,为天地立心,为生民立命,为往圣继绝学,为万世开太平”。这句话,火遍了全网,其原因是引发了大多数人的共鸣;从小接触的思想就是好好学习,以后找个好工作,摆脱当前的困境,可是帮助那些仍在困境中漂泊的人,岂不是更有意义。感触颇深的我,也想到了自己的作为,在发表文章、总结经验时,我内心的想法是:

在这里插入图片描述

image

前面一周我讲解了创建型设计模式的6种,从简单工厂模式到单例模式,创建型模式的主要用于描述如何创建对象。今天起我开始讲解结构型模式,此类型模式主要讲解如何将类或者对象按照某种布局组成更大的结构。今天开始结构型模式第一节:适配器模式,所谓适配,顾名思义,在当前不兼容新方式的基础上,完成改造,适配新的方式,具体如何,下面详细讲解。

第三节

适配器模式
在这里插入图片描述

适配器模式(Adapter)的定义如下:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。适配器模式分为类适配器模式和对象适配器模式两种。

类适配器模式:主要通过类与类与类之间增加泛化关系及对接口增加实现关系完成对新接口的适配。
对象适配器模式:主要通过对象与对象间增加聚合关系完成适配。

在这里插入图片描述
在这里插入图片描述

一个朋友前几年一直在使用3.5mm的圆孔插口耳机,自己手机电脑均使用是3.5mm的插口,有一天这位朋友的手机坏了,买了个新的手机,发现新的手机已经是TypeC接口,目前的3.5mm耳机已经不能用了,但是自己的电脑还是3.5mm的耳机,又不想重新买一条,所以这个时候需要进行适配。此时花几块钱买了个3.5mm转TypeC的转换器,手机想用耳机的时候使用转换器加3.5mm耳机,电脑使用耳机的话,只是使用3.5mm耳机即可,这样子就完成了适配。那这个场景下,目标接口就是TypeC接口,是配置类就是原有的3.5mm接口,当3.5mm+TypeC转换器的时候,这条耳机就是适配器类,既不影响之前功能、又支持新的接口,它完成了适配器要完成的任务。

今天的UML图使用目前项目开发过程中的json请求处理及form表单程序处理的实例,从form转json的方式来进行类适配器和对象适配器的举例。同样会使用json和form互转的方式讲解类对象的双向适配器,双向适配器可以理解上面场景中转接器的升级,既能3.5mm转TypeC也能TypeC转3.5mm。

在这里插入图片描述

image

对象适配器模式UML类图

image

双向适配器

image

第三节

代码实现
在这里插入图片描述
1.创建目标接口

package com.yang.adaptee;


/**
 * @ClassName Target
 * @Description 目标接口
 * @Author IT小白架构师之路
 * @Date 2020/12/16
 * @Version 1.0
 **/
public interface Target {
    /**
     * 声明的需要处理form表单的请求
     */
    public void fromRequest();
}

2.创建适配者(原有类)

package com.yang.adaptee;


/**
 * @ClassName Adaptee
 * @Description 适配者
 * @Author IT小白架构师之路
 * @Date 2020/12/16
 * @Version 1.0
 **/
public class Adaptee {
    /**
     * 可处理json的请求
     */
    public void jsonRequest(){
        System.out.println("我是Json请求处理程序");
    }
}

3.创建类对象适配器

package com.yang.adaptee;


/**
 * @ClassName ClassAdapterClient
 * @Description 类适配器客户端测试
 * @Author IT小白架构师之路
 * @Date 2020/12/16
 * @Version 1.0
 **/
public class ClassAdapterClient {
    public static void main(String[] args) {
        System.out.println("类对象适配器测试");
        //创建类适配器
        Target target = new ClassAdapter();
        //测试
        target.fromRequest();
    }
}

4.创建类对象适配器测试客户端

package com.yang.adaptee;


/**
 * @ClassName ClassAdapterClient
 * @Description 类适配器客户端测试
 * @Author IT小白架构师之路
 * @Date 2020/12/16
 * @Version 1.0
 **/
public class ClassAdapterClient {
    public static void main(String[] args) {
        System.out.println("类对象适配器测试");
        //创建类适配器
        Target target = new ClassAdapter();
        //测试
        target.fromRequest();
    }
}

5.测试结果如下,完成了从form到json的转换,完成了适配器的功能

类对象适配器测试
form转换为json
我是Json请求处理程序

在这里插入图片描述

  1. 创建对象适配器
package com.yang.adaptee;


/**
 * @ClassName ObjectAdapter
 * @Description 对象适配器
 * @Author IT小白架构师之路
 * @Date 2020/12/16
 * @Version 1.0
 **/
public class ObjectAdapter implements Target{
    //成员对象
    private Adaptee adaptee;
    //有参数构造,需要指定构造者对象
    public ObjectAdapter(Adaptee adaptee){
        this.adaptee = adaptee;
    }


    @Override
    public void fromRequest() {
        //适配器将form转换为了json
        System.out.println("form转换为json");
        //使用原有的json处理方式
        adaptee.jsonRequest();
    }
}

2.创建对象适配器测试类

package com.yang.adaptee;


/**
 * @ClassName ObjectAdapterClient
 * @Description 对象适配器测试
 * @Author IT小白架构师之路
 * @Date 2020/12/16
 * @Version 1.0
 **/
public class ObjectAdapterClient {
    public static void main(String[] args) {
        System.out.println("对象适配器测试");
        //创建需要的适配者对象
        Adaptee adaptee = new Adaptee();
        //创建对象适配器
        Target target = new ObjectAdapter(adaptee);
        //测试
        target.fromRequest();
    }
}

3.运行结果如下,同样完成了适配

对象适配器测试
form转换为json
我是Json请求处理程序

在这里插入图片描述

1.创建Json适配者

package com.yang.adaptee.TwoWayAdapter;


/**
 * @ClassName AdapteeJson
 * @Description Json适配者
 * @Author IT小白架构师之路
 * @Date 2020/12/16
 * @Version 1.0
 **/
public class AdapteeJson {
    /**
     * 可处理json的请求
     */
    public void jsonRequest(){
        System.out.println("我是Json请求处理程序");
    }
}

2.创建form适配者

package com.yang.adaptee.TwoWayAdapter;


/**
 * @ClassName AdapteeForm
 * @Description form适配者
 * @Author IT小白架构师之路
 * @Date 2020/12/16
 * @Version 1.0
 **/
public class AdapteeForm {
    /**
     * 可处理from的请求
     */
    public void formRequest(){
        System.out.println("我是form请求处理程序");
    }
}

3.创建json的目标接口

package com.yang.adaptee.TwoWayAdapter;


/**
 * @ClassName TargetJson
 * @Description 注释
 * @Author IT小白架构师之路
 * @Date 2020/12/16
 * @Version 1.0
 **/
public interface TargetJson {
    //抽象json处理方法声明
    public void jsonRequest();
}

4.创建form的目标接口

package com.yang.adaptee.TwoWayAdapter;


/**
 * @ClassName Targetform
 * @Description 注释
 * @Author IT小白架构师之路
 * @Date 2020/12/16
 * @Version 1.0
 **/
public interface Targetform {
    //声明抽象的form请求
    public void formRequest();
}

5.创建双向适配器

package com.yang.adaptee.TwoWayAdapter;


/**
 * @ClassName TwoWayAdapter
 * @Description 双向适配器
 * @Author IT小白架构师之路
 * @Date 2020/12/16
 * @Version 1.0
 **/
public class TwoWayAdapter implements Targetform,TargetJson{
    //成员对象
    private AdapteeForm adapteeForm;
    private AdapteeJson adapteeJson;
    //form有参构造
    public TwoWayAdapter(AdapteeForm adapteeForm){
        this.adapteeForm = adapteeForm;
    }
    //json有参构造
    public TwoWayAdapter(AdapteeJson adapteeJson){
        this.adapteeJson = adapteeJson;
    }


    @Override
    public void jsonRequest() {
        System.out.println("json转from");
        adapteeForm.formRequest();
    }


    @Override
    public void formRequest() {
        System.out.println("fom转json");
        adapteeJson.jsonRequest();
    }
}

6.创建双向适配器测试客户端

package com.yang.adaptee.TwoWayAdapter;


/**
 * @ClassName TwoWayAdapterClient
 * @Description 双向适配器测试
 * @Author IT小白架构师之路
 * @Date 2020/12/16
 * @Version 1.0
 **/
public class TwoWayAdapterClient {
    public static void main(String[] args) {
        System.out.println("测试json转form适配者");
        //创建适配者
        AdapteeForm adapteeForm = new AdapteeForm();
        //创建适配器
        TargetJson targetJson = new TwoWayAdapter(adapteeForm);
        targetJson.jsonRequest();
        System.out.println("---------------我是分割线----------------");
        System.out.println("测试form转json适配者");
        //创建适配者
        AdapteeJson adapteeJson = new AdapteeJson();
        //创建适配器
        Targetform targetform = new TwoWayAdapter(adapteeJson);
        targetform.formRequest();
    }
}

7.测试结果如下,完成了json到form、form到json的双向互转。

测试json转form适配者
json转from
我是form请求处理程序
---------------我是分割线----------------
测试form转json适配者
fom转json
我是Json请求处理程序

第四节

适配器模式优缺点及适用场景

优点:

    1.客户端通过适配器可以透明地调用目标接口,需要提前知道目标适配者是谁。

    2.可以将现有的类进行复用,完成新功能的支持,不需要修改原有代码。

    3.将目标类与适配者类进行了解耦,解决了目标类和适配者类接口不一致的问题。

缺点:

    1.增加适配器时需要考虑业务场景需要的适配者,会增加系统的复杂性。

    2.代码阅读起来会难一点,对开发人员不友好,增加维护难度。

类适配器缺点

    需要增加新的适配器时只能重新编写适配器,因为Java只支持单继承。

对象适配器缺点:

    对象适配器会造成适配器成员对象变多,增加了复杂性。

适用场景:

1. 三方对接时,目前已经存在的类的接口与新接入的接口规范不能对照,需要创建一个新的适配器去处理。

2. 将系统中已有类的方法进行整合复用时。

3. 多方对接时,需要多方进行接口兼容时,可考虑多向适配器。

扫描二维码

关注我吧

IT小白架构师之路

image

设计模式之适配器模式 适配器模式是一种非常有用的设计模式,它允许我们将不兼容的接口进行适配,使得原本不能一起工作的类可以一起工作。在软件开发中,我们经常会遇到接口不兼容的问题,使用适配器模式可以很好地解决这些问题。然而,我们也需要注意到适配器模式的缺点,避免过度使用导致系统变得复杂和难以理解。 阅读详情

相关推荐

双向适配器

猫狗之互相学习,双向适配器实现.读取配置文件,实现面向接口编程

设计模型之适配器模式(含UML完整实例)

设设计模型之适配器模式 1.适配器模式 1.1 定义与特点   适配器模式(Adapter)的定义如下:使用一个已经存在的类,而他的接口不符合我们的需求。这个时候我们本着开闭原则,要创建一个既符合我们需求(加入独立的或不兼容的接口功能)又实现了已存在的接口的类。适配器模式分为类结构型模式和对象结构型模式两种,前者类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对...

atu1111的博客 9624

自抗扰控制(ADRC)原理与MATLAB实现详解

自抗扰控制(ADRC)是一种先进的鲁棒控制策略,其核心在于通过扩张状态观测器(ESO)实时估计并补偿系统总扰动。相比传统PID控制,ADRC不依赖精确数学模型,特别适合处理非线性、时变系统。从控制原理看,ADRC将系统内部动态和外部扰动统一建模,通过带宽参数化方法实现快速响应与强抗扰能力。在工程实践中,ADRC已成功应用于无人机飞控、伺服系统等场景,MATLAB仿真显示其上升时间可比PID提升46%,抗扰动恢复时间缩短60%。典型实现包含ESO设计、扰动补偿和PD控制三部分,参数整定遵循ω₀=3~5倍系统带

weixin_33585822的博客 95

设计模式 —— Adapter 模式

设计模式之适配器模式分析。适配器模式示例、使用场景等。

一步一步往上爬 979

ICDAR数据集简介

ICDAR(文档分析与识别国际会议)是OCR领域的权威会议,每两年发布一次数据集,专注于‌自然场景文本检测与识别‌,涵盖多语言、复杂版式和真实环境挑战。街景、广告牌、票据、手写文档等真实场景图像。包含水平、垂直、倾斜、弯曲文本,背景干扰大,部分文本存在遮挡或模糊。提供文本位置坐标(矩形/四边形框)及内容,无法识别的文本标记为###。以上总结提炼了ICDAR的核心价值与应用方法论。给出最佳实践方法是官网数据预训练模型 + 业务数据微调(比如用PPOCRLabel标注100+张业务图)。

xinghaitao2005的博客 1117

linux和mac安装+配置circos(

一定要下载完这两个包,GD才会work,要不然会报错,且-modules显示也是fail。官网的教程说的很明白,但是很多包都已经过时了需要在网上找。一般来讲,所有包的安装都不会太困难,除了GD。1.是因为官网给的链接下出来的tgz无法解压。2.我的电脑安装后GD照样是fail的。,进入这个地址下一个.tgz。第二点的原因在于,官网的情况。,进入这个地址,按部就班。GD安装困难有以下几点。搞了一天终于配置成功。

xiufan1的博客 549

Java设计模式之结构型-适配器模式(UML类图+案例分析)

将一个类的接口转换为另一个接口,使得原本由于接口不兼容的类进行兼容。适配器模式主要分为类适配器模式和对象适配器模式,前者类适配器模式之间的耦合度比后者更高,所以更推荐使用对象适配器。

黄团团的个人博客 3289

摩尔线程GPU实战:5分钟搞定AI模型部署(含Docker避坑指南)

本文详细介绍了摩尔线程GPU在AI模型部署中的实战应用,包括环境配置、Docker避坑指南及性能优化技巧。通过5分钟快速部署指南,帮助开发者高效利用摩尔线程GPU进行AI模型推理,特别针对常见兼容性问题提供解决方案,显著提升部署效率。

weixin_28736335的博客 451

设计模式类图总结

    1.        外观模式定义: 为子系统中的一组接口提供一个一致的的界面,Façade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 Façade类的形式:   Façade接口的形式:   Façade可以和单例模式,抽象工厂模式组合使用。   1.       适配器模式: 将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于...

liwenjun00的博客 301

AI智能体安全沙箱agentguard:为LLM代码执行筑起防火墙

在AI应用开发领域,大语言模型(LLM)驱动的智能体(Agent)能够自动生成并执行代码,极大地提升了自动化能力。然而,赋予AI直接执行系统命令的权限也带来了显著的安全风险,如恶意代码注入、敏感数据泄露和系统资源滥用。为了解决这一核心矛盾,安全沙箱技术应运而生,它通过在不可信代码与宿主系统之间建立隔离层,实现"默认拒绝、最小权限"的安全原则。agentguard项目正是这一理念的工程实践,它结合白名单机制与容器化隔离,为AI智能体提供了可配置、可审计的安全执行环境。该方案不仅适用于内部自动化工具开发,也为构

weixin_28695537的博客 296

SAP-MM-供应商对账平台(功能集合)

(1)集成OA审批,线上核销,结果写入SAP; (2)集成SRM,线上与供应商对账确认,写入SAP; (3)集成财务付款结果确认写入,OA回传结果,定时同步SRM供应商平台。 欢迎留言交流,功能完善,如需要页面设计,请订阅专栏

qq_32198063的博客 748

设计模式——适配器模式

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

程序猿进阶 1993

下载和运行GitHub上的代码教程总结

从昨天开始就想着从GitHub上下载一个开源的Vue的实战项目,希望能从中学习更多的Vue的实用内容,结果搞了半天好不容易下载了,不知道怎么弄。然而,今天终于成功了,激动地我赶紧来记录一下。 如何从GitHub上下载自己需要的项目: 1.首先,你要有一个自己的GitHub(https://github.com/)的账号。关于如何注册GitHub的账号以及如何获取你的SSH密钥这个问题,请大家参...

不怕万人阻挡,只怕自己投降 29万+

设计模式详解(七)——适配器模式

类适配器模式是通过让Adapter(适配器)实现Target(被适配者)的抽象接口,然后继承Adaptee(要适配者),具体适配过程是由我们的适配器的Resuest()方法中对Adaptee(要适配者)的SpecificRequest()方法进行适配,使得适配器的Request()方法返回我们需要的被适配者,供我们使用。适配器模式的用意是要改变源的接口,以便于目标接口相容。根据适配器类与适配者类的关系不同,适配器模式可分为对象适配器和类适配器两种,在对象适配器模式中,适配器与适配者之间是关联关系;

qq_44307209的博客 5557

uniapp [全端兼容] - 实现省市区选择器三四级联动组件,uniapp选择地址自定义省市区三级联动插件,弹框式多级联动选择器区域选择(全平台兼容苹果安卓App、支付宝微信小程序、移动端H5网页)

uni-app省市区选择器,省市区街道三级四级联动选择器,uniapp自定义多列选择器省市两级联动,uniapp picker组件实现多级联动,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,uniApp选择器省市区县街道乡镇,uniapp实现省市区选择联动,uniapp城市三级联动(自定义组件)_uniapp三级联动,picker插件省市区联动,uniapp小程序省市区选择器,uni-app 省市区街道的四级联动选择,uniapp怎样实现省市区地址三级联动uni

🏆 前端领域优质创作者 1万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

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

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

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

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

设计模式之AdapterPattern适配器模式

在现实生活中,经常出现两个对象因接口不兼容而不能在一起工作的实例,这时需要第三者进行适配。例如,讲中文的人同讲英文的人对话时需要一个翻译,用直流电的笔记本电脑接交流电源时需要一个电源适配器,用计算机访问照相机的 SD 内存卡时需要一个读卡器等。 通俗来讲,适配器就是一个中转站,把A模型转换为B模型。 适配器模式的定义与特点: 定义如下: 将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。适配器模式分为类结构型模式和对象结构型模式两种,类结构型模式类之间的耦合

haoyuegongzi的博客 252

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

VC中sqlite的使用

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

DesignPattern设计模式

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

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

您的设计模式——适配器模式【Adapter Pattern】

这个模式也很简单,你笔记本上的那个拖在外面的黑盒子就是个适配器,一般你在中国能用,在日本也能用,虽然两个国家的的电源电压不同,中国是 220V,日本是 110V,但是这个适配器能够把这些不同的电压转换为你需要的 36V 电压,保证你的笔记本能够正常运行,那我们在设计模式中引入这个适配器模式是不是也是这个意思呢?是的,一样的作用,两个不同接口,有不同的实现,但是某一天突然上帝命令你把 B 接口 转换

504

(七)趣学设计模式 之 适配器模式!

适配器模式就像插座转换器,让不兼容的接口也能愉快玩耍!

qq_56158663的博客 1252

设计模式系列:适配器模式

适配器模式(Adapter Pattern)又称为变压器模式,它是一种结构型设计模式。适配器模式的目的是将一个类的接口转换成客户端所期望的另一种接口,从而使原本因接口不匹配而不能一起工作的两个类能够一起工作。适配器模式有两种形式:类适配器(Class Adapter)和对象适配器(Object Adapter)。类适配器通过继承实现适配器功能,让Adapter实现Target接口并且继承Adaptee,这样Adapter就具备Target和Adaptee的特性,可以将两者进行转化。

程序人生 1615

JAVA设计模式之适配器模式

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

u011077231的专栏 2837

详解设计模式:适配器模式

适配器模式(Adapter Pattern)又称为变压器模式,是 GoF 的 23 种设计模式中的一种结构型设计模式。适配器模式 的功能是将一个类的接口变成客户端所期望的另一种接口,从而使原本因接口不匹配而导致无法在一起工作的两个类能够一起工作 本篇内容包括:关于适配器模式、适配器的实现 Demo

栗筝i的博客 4338

设计模式之 适配器模式

适配器模式(Adapter Pattern)是一种结构型设计模式,它允许将一个类的接口转换成客户端所期望的另一个接口。通过使用适配器模式,原本由于接口不兼容的类可以进行协作。简单来说,适配器模式就是将不兼容的接口连接起来,使得客户端能够与之交互而不需要修改原有代码。在现实世界中,这就像是一个电压适配器,它将不同电压的插头转化为标准插座的电压和插头,以便设备能够正常使用。

2403_82445975的博客 1477
上一篇: 你就是我的唯一【常用设计模系列(六)—单例模式】
下一篇: 常用设计模式系列(八)—代理模式
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

IT小白架构师之路

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

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

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

打赏作者

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

抵扣说明:

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

余额充值