当前位置: 首页 > news >正文

认识适配器模式

适配器模式

一、定义

在不修改原来代码的情况下,适配器模式使接口不兼容的那些类可以一起工作。

二、适配器结构

1、Target(目标抽象类):目标抽象类定义客户所需的接口,可以是一个抽象类或者接口,也可以是具体类。在类适配器中,由于Java语言不支持多重继承,它只能是接口。
2、Adapter(适配器类):它可以调用另一个接口 ,作为一个转换器,对Adaptee和Target进行适配。适配器Adapter是适配器模式的核心,在类适配器中,它通过实现Target接口并继承Adaptee类来使二者产生联系,在对象适配器中,它通过继承Target并关联一个Adaptee对象来使二者产生联系。
3、Adaptee(适配者类):适配者即被适配的角色,它定义了一个已经存在的接口,这个接口需要适配,适配者类一般是一个具体的类,包含了客户希望使用的业务方法,在某些情况下甚至没有适配者类的代码。

三、实现

mac电脑多屏显示需要外接显示屏,此时就需要一个转接头。

1、类适配器

// 定义一个屏幕显示画面
public class Screen {public void show(){System.out.println("屏幕显示画面");}
}
//定义一个显示器适配器(转接头)
public interface ScreenAdapter {void adaption();
}
//将显示器接到mac上,完成多屏显示
public class ToMacAdapter extends Screen implements ScreenAdapter{@Overridepublic void adaption() {System.out.println("接入转换器");super.show();}
}

2、对象适配器

但是我又想接多屏显示,又想听音乐的话,类适配器就不能支持了。这时我们可以用对象适配器。

//听音乐
public class Music {public void listen(){System.out.println("listen music");}
}public interface MixAdapter {//听音乐void listenMusic();//联网void screen();
}public class USBCAdapter implements MixAdapter{private Screen screen;private Music music;@Overridepublic void listenMusic() {music.listen();}@Overridepublic void screen() {screen.show();}
}

四、适配器模式的优缺点

优点:
1、能提高类的透明性和复用,现有的类复用但不需要改变。
2、目标类和适配器类解耦,提高程序的扩展性。
3、在很多业务场景中符合开闭原则。
缺点:
1、适配器编写过程需要全面考虑,可能会谧加系统的复杂性。
2、增加代码阅读难度,降低代码可读性,过多使用适配器会使系统代码变得凌乱。

http://www.lryc.cn/news/33370.html

相关文章:

  • JavaSe第6次笔记
  • 单例设计模式
  • 第七章 opengl之光照(基础光照)
  • 不考虑分配与合并情况下,GO实现GCMarkSweep(标记清除算法)
  • 性能分析利器:火焰图
  • 八股总结(三)操作系统内存管理、进程线程、进程同步与通信、中断与异常、常用命令
  • 概率论小课堂:条件概率和贝叶斯公式(机器翻译的工作原理)
  • 流量与日志分析
  • 英文论文写作常用例句整理汇总(持续更新)
  • [N0wayBack 练习题] My_enc,Euler,EasyLock,RRRRSA,EasyNumber,pwn
  • 网分线缆测试和dc-block
  • Java创建线程的方式只有一种:Thread+Runnable
  • 数据加密--课后程序(Python程序开发案例教程-黑马程序员编著-第3章-课后作业)
  • 【GO】K8s 管理系统项目33[前端部分–登录和登出]
  • Vue 计算属性基础知识 监听属性watch
  • PAT:L1-004 计算摄氏温度、L1-005 考试座位号、L1-006 连续因子(C++)
  • Redis集群方案应该怎么做?
  • 连续点击返回键退出Android 应用
  • 【PyTorch】教程:torch.nn.Hardswish
  • nacos源码入门
  • 【记录】Samba|Windows 11的Samba连接切换用户
  • vue hiprint vue使用hiprint打印控件VUE HiPrint HiPrint简单使用
  • HBase常用Shell命令
  • 【阿里云】Apsara Clouder云计算专项技能认证-云服务器ECS入门,考试真题分享
  • 怎样编写java程序
  • 面向对象设计模式:结构型模式之适配器模式
  • Unity3D Shader系列之模板测试
  • 机器学习中的数学——精确率与召回率
  • Oracle启动数据库报ORA-01102解决办法
  • Go 语言面向对象编程及实践