登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
1
2
/ 2 页
下一页
返回列表
首页
›
业界区
›
业界
›
c#中适配器模式详解
c#中适配器模式详解
[ 复制链接 ]
勺缓曜
2025-6-9 08:21:21
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
一、基础介绍:
想象这样一个场景,原项目中接口返回的数据是XML格式的数据,但现在来了一个新客户,它期望接口返回的数据类型为json格式的。
想要实现要么就是改原有接口,但这样就违反了开闭原则,容易出现未知bug,影响到老客户的正常使用。
而如果写一个适配器类也就是转换类(第三方类),将原本返回的XML格式数据转换成json格式数据,而具体数据是怎么来的则直接用原有接口方法就可以。
新客户只需要调用适配器类就可以了,而老客户这边也不会进行任何修改处理。
如果再有新的客户要求其他类型的返回,只需要在适配器类中增加相应的转换处理就可以了。
再思考一个问题,现实生活中空调插头一般都是三头的,但如果家里只有两孔插座,那必然是插不进去的。
以前老的办法那就是把三头插座掰掉一个,另外两个也掰直,这样做存在很大的安全隐患,而且有时并不能工作。
而如果提供一个拥有三孔插座和两头插头的转换器的话,那空调可以先插在这个转换器上,然后这个转换器再插在插座上就可以了。
本质并没有变,只是将二孔插座包装了一下,向外界提供了一个三孔插座的外观以供客户使用。
适配的本质就是转换,将不满足使用条件的东西通过第三方类进行加工处理成可使用的东西。
适配器模式(Apapter Pattern)是一种结构型设计模式,将一个类的接口转换成客户希望的另一个接口。适配器模式使得原本由于接口兼容而不能一起工作的那些类可以一起工作。
适配器模式用来解决现有对象与客户端期待接口不一致的问题。
目标角色(Target)
:描述了其他类与客户端代码合作时必须遵循的协议。
客户角色(Client)
:与符合Target接口的对象协同。
被适配(服务类,功能类)(Adaptee)
:定义一个已经存在并已经使用的接口,这个接口需要适配。 客户端与其接口不兼容, 因此无法直接调用其功能。
适配器(Adapter)
:适配器模式的核心。适配器接受客户端通过适配器接口发起的调用,同时根据其内在逻辑调用对应服务类。客户端代码只需通过接口与适配器交互即可, 无需与具体的服务类耦合。
二、优缺点:
单一职责原则
:可以将接口或数据转换代码从主要业务逻辑中分离。
开闭原则
: 客户端接口只需适配器进行交互, 能在不修改现有代码的情况下在程序中添加新类型的适配器。
通过适配器模式,可以使两个不兼容的接口协同工作,避免了修改现有代码的需要。
提高了代码的复用性和灵活性,因为适配器可以重复使用,并且可以在不同的场景中使用。
降低了系统的耦合度,适配器模式允许系统中的各个组件相互独立地演化。
代码整体复杂度增加
:因为需要新增一系列接口和类。 有时直接更改服务类使其与其他代码兼容会更简单。
三、应用场景:
系统需要复用现有类,但是接口又与复用环境要求不一致的情况。
旧系统与新系统的兼容:
可以使新系统能够无缝地与老旧系统进行通信
。
第三方组件的集成:
适配器可以将第三方组件的接口转换为符合我们系统需求的接口形式,从而能够顺利地集成到我们的系统中。
多个类库之间的互操作:
适配器模式可以起到桥梁的作用
。
四、创建方式:
适配器模式有两种实现结构
,对象适配器
和
类适配器。
试想一下,目前有一个三头插头的空调,需要一个三孔插座,但目前只有一个两孔插座。
编写一个适配器来包装一下这个两孔插座,让用户可以使用这个空调。
类适配器
1 /// <summary>
2 /// 两孔插座---被适配者
3 /// </summary>
4 public class TwoHoleSocket
5 {
6 public void SpecificRequest()
7 {
8 Console.WriteLine("两孔插座");
9 }
10 }
11
12 /// <summary>
13 /// 三孔插座---目标角色
14 /// </summary>
15 public interface IThreeHoleSocket
16 {
17 void Request();
18 }
19
20 /// <summary>
21 /// 适配器类提供了三孔插座的外观,但其本质是两孔插座
22 /// </summary>
23 public class PowerAdapter : TwoHoleSocket, IThreeHoleSocket
24 {
25 public void Request()
26 {
27 Console.WriteLine("提供三孔插座的外观");
28 //执行两孔插座的功能
29 this.SpecificRequest();
30 }
31 }
32
33 /// <summary>
34 /// 客户端
35 /// </summary>
36 class Client
37 {
38 static void Main(string[] args)
39 {
40 //客户端可以通过适配器来使用这个两孔插座了(因为外观已经是三孔的了)
41 IThreeHoleSocket threeHoleSocket = new PowerAdapter();
42 threeHoleSocket.Request();
43 Console.ReadKey();
44 }
45 }
复制代码
View CodeTwoHoleSocket类代表原有的两孔插座,IThreeHoleSocket接口来规范三孔插座的外观。
PowerAdapter类代表适配器,将两孔插座赋予三孔插座的外观。
这样用户就可以使用这个适配器来使用这个三头插头的空调了。
从实例中可以看出,类适配器只要是用继承来实现的,但如果有很多个类进行适配,这个方式就不支持了。
对象适配器
1 /// <summary>
2 /// 两孔插座---被适配者
3 /// </summary>
4 public class TwoHoleSocket
5 {
6 public void SpecificRequest()
7 {
8 Console.WriteLine("两孔插座");
9 }
10 }
11
12 /// <summary>
13 /// 三孔插座---目标角色
14 /// </summary>
15 public class ThreeHoleSocket
16 {
17 // 客户端需要的方法
18 public virtual void Request()
19 {
20 //具体实现
21 }
22 }
23
24 /// <summary>
25 /// 适配器类提供了三孔插座的外观,但其本质是两孔插座
26 /// </summary>
27 public class PowerAdapter : ThreeHoleSocket
28 {
29 //引用两孔插座的实例,从而将客户端与TwoHoleSocket联系起来
30 public TwoHoleSocket twoHoleSocket = new TwoHoleSocket();
31 public override void Request()
32 {
33 Console.WriteLine("提供三孔插座的外观");
34 this.Request();
35 //执行两孔插座的功能
36 twoHoleSocket.SpecificRequest();
37 }
38 }
39
40 /// <summary>
41 /// 客户端
42 /// </summary>
43 class Client
44 {
45 static void Main(string[] args)
46 {
47 //客户端可以通过适配器来使用这个两孔插座了(因为外观已经是三孔的了)
48 ThreeHoleSocket threeHoleSocket = new PowerAdapter();
49 threeHoleSocket.Request();
50 Console.ReadKey();
51 }
52 }
复制代码
View Code从实例中可以看出,对象适配器其实就是在适配器类中创建了一个被适配者的实例,从而将两者联系在一起。
这种方式采用 “对象组合”的方式,更符合松耦合。
五、总结:
总而言之,适配器就是一个第三方类,将不合时宜的东西转换成符合心意的工具类。
本质就是转换。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
适配器
模式
详解
相关帖子
最小二乘问题详解14:鲁棒估计与5点算法求解本质矩阵
Cursor 四种交互模式
最小二乘问题详解16:束平差工程实践总结
元器件详解——DS12C887
Block 内存布局详解
__block 变量内存布局详解
TCP/IP协议详解:高性能服务器开发的底层基石
Block Copy 的内存布局详解
ACIS SAT 文件格式详解及其解析
ACIS SAT 文件格式详解及其解析
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
最小二乘问题详解14:鲁棒估计与5点算法求解本质矩阵
0
516
吉娅寿
2026-03-09
业界
Cursor 四种交互模式
0
1049
荦绅诵
2026-03-10
业界
最小二乘问题详解16:束平差工程实践总结
0
40
栓州
2026-03-14
业界
元器件详解——DS12C887
0
27
山芷兰
2026-03-16
业界
Block 内存布局详解
0
938
涂流如
2026-03-17
业界
__block 变量内存布局详解
0
703
裴涛
2026-03-20
业界
TCP/IP协议详解:高性能服务器开发的底层基石
0
697
汲佩杉
2026-03-20
业界
Block Copy 的内存布局详解
0
14
郁兰娜
2026-03-22
安全
ACIS SAT 文件格式详解及其解析
0
207
韶又彤
2026-03-23
安全
ACIS SAT 文件格式详解及其解析
0
893
碛物
2026-03-23
回复
(24)
连热
2025-10-22 22:03:34
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
不错,里面软件多更新就更好了
刘凤
2025-11-12 00:40:30
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
这个好,看起来很实用
届表
2025-11-12 09:26:48
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢发布原创作品,程序园因你更精彩
威割
2025-12-8 19:47:09
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
这个好,看起来很实用
庞悦
2025-12-11 14:30:32
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
懂技术并乐意极积无私分享的人越来越少。珍惜
匣卒
2025-12-20 00:28:54
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
这个好,看起来很实用
豌畔丛
2025-12-26 03:34:34
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
鼓励转贴优秀软件安全工具和文档!
魁睥
2026-1-21 18:48:05
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
分享、互助 让互联网精神温暖你我
砂歹汤
2026-1-24 11:25:40
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢分享,学习下。
饨篦
2026-1-25 09:17:16
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢分享,学习下。
甘子萱
2026-1-27 02:18:05
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢分享
空娅芬
2026-1-29 05:01:30
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
东西不错很实用谢谢分享
于映雪
2026-1-29 07:16:05
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
喜欢鼓捣这些软件,现在用得少,谢谢分享!
全阳霁
2026-2-7 09:23:22
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
前排留名,哈哈哈
滕佩杉
2026-2-9 11:43:18
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
yyds。多谢分享
仰翡邸
2026-2-9 23:59:41
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
新版吗?好像是停更了吧。
饮邺谲
2026-2-11 00:51:34
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
前排留名,哈哈哈
窝酴
2026-2-11 22:41:45
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢分享,下载保存了,貌似很强大
襁壮鸢
2026-2-14 00:27:33
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
过来提前占个楼
下一页 »
1
2
/ 2 页
下一页
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
安全
签约作者
程序园优秀签约作者
发帖
勺缓曜
2026-2-14 00:27:33
关注
0
粉丝关注
27
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991125
anyue1937
9994892
kk14977
6845359
4
xiangqian
638210
5
神泱
9522
6
韶又彤
9916
7
宋子
9878
8
荪俗
9018
9
闰咄阅
9995
10
刎唇
9997
查看更多
今日好文热榜
145
IOFILE结构体的介绍与House of orange
1
IOFILE结构体的介绍与House of orange
0
IOFILE结构体的介绍与House of orange
74
lvgl-micropython、lv_micropython和lv_bin
198
InnoDB存储结构全解析:行页区段与单表2000
938
上周热点回顾(3.16-3.22)
814
上周热点回顾(3.16-3.22)
2
上周热点回顾(3.16-3.22)
6
上周热点回顾(3.16-3.22)
3
上周热点回顾(3.16-3.22)
6
上周热点回顾(3.16-3.22)
6
上周热点回顾(3.16-3.22)
2
上周热点回顾(3.16-3.22)
6
上周热点回顾(3.16-3.22)
3
上周热点回顾(3.16-3.22)
7
上周热点回顾(3.16-3.22)
6
上周热点回顾(3.16-3.22)
7
上周热点回顾(3.16-3.22)
5
上周热点回顾(3.16-3.22)
7
上周热点回顾(3.16-3.22)