设计模式【6.2】-- 再聊聊适配器模式
这里说的适配器不是通常所说的类适配器,对象适配器,接口适配器,这里实现的是把所有的类进行统一管理的适配器。如需要查找设计模式的三种主要适配器模式,请点击https://blog.csdn.net/Aphysia/article/details/80291916
适配器模式(百度百科):在计算机编程中,适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。
可以这么理解,原来可能两个接口或者两个类不兼容,适配器模式要做的事情就是把它们统一管理,让他们可以一起工作。举个简单的例子:内存卡和笔记本,是不能直接连接工作的,但是我们使用读卡器,相当于适配器,把它们连接起来了。
1.不使用适配器的例子:
- 需求:程序猿的工作是
program()
,教师的工作是teach()
,那么这些不同的职业,具体的工作都是不一样的,这些程序猿program()方法内容也可能是不一样的,比如说京东,阿里,腾讯等等,教师也是一样的,不同学校的老师工作内容也各异。所以我们必须定义接口,不同工作内容的也可以通过实现自己的接口去实现。
代码结果如下:
IProgramer.class(程序猿撸代码的接口)
Programer.class(程序猿的类,实现了撸代码的接口)
下面的教师接口以及实现教师的类也和上面程序猿的一样:
ITeacher.class(教师教书接口):
Teacher.class(实现了教书的教师类):
MyTest.class 测试类:
运行结果:
理解:如果不是用适配器模糊,那么我们要定义出所有的工种对象(程序猿,教师等等),还要为他们实现各自的接口,然后对他们的方法进行调用,这样有多少个工种,就要写多少个方法调用,比较麻烦。
2.只定义一个适配器实现类
在前面的基础上修改,增加了IWorkAdapter.class
以及它的实现类WorkerAdapter.class
,以及更改了测试方法,其他的都没有改变,代码结构如下:
增加的IWorkAdapter.class
(适配器的接口):
增加的WorkAdapter.class
(适配器的类):
更改过的测试类MyTest.class
:
结果依然不变:
分析:只写一个适配器,功能上就像是把接口集中到一起,在中间加了一层,这一层把调用不同工种(程序猿,教师)之间的差异屏蔽掉了,这样也达到了解耦合的作用。
3.多个适配器的模式
也就是为每一个工种都定义一个适配器(在一个适配器的基础上进行修改)
修改 IWorkAdapter.class
定义一个TeacherAdapter.class
定义一个ProgrammerAdapter.class
测试类(Test.class
):
个人理解:其实多个适配器的根本是去获取支持该对象的适配器,通过该适配器来使用这个对象。
__EOF__

本文链接:https://www.cnblogs.com/Damaer/p/15686198.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库