标签:适配 适配器 网线 void 接口 模式 public
概述
将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不不能一起工作的那些类可以在一起工作
场景设想
你的电脑没有网线的接口,你需要购买转换器,来连接网线的接口,继而完成上网
角色分析:
- 目标用户:客户所期待的接口,目标可以是具体的或抽象的类,也可以是接口
- 需要适配的类:需要适配的类或者适配器类
- 适配器:通过包装一个需要适配的对象,把原接口转换成目标对象
适配器模式的关系图
代码
适配器模式可以分成:类适配器和对象适配器
测试代码一:
-
编写适配器的接口类:UsbToNet
package pers.mobian.adapter; //适配器、转接头 public interface UsbToNet { //将usb接口和网线接口进行连接 public void handleRequest(); }
-
编写网线类:Adaptee
package pers.mobian.adapter; //网线 public class Adaptee { //网线的上网功能 public void request() { System.out.println("连接成功,可以上网了"); } }
-
编写适配器接口类的实现类,并且继承网线类:Adapter
package pers.mobian.adapter; public class Adapter extends Adaptee implements UsbToNet { @Override public void handleRequest() { //调用父类的方法,实现上网 super.request(); } }
-
编写电脑类:Computer
package pers.mobian.adapter; //电脑端 public class Computer { //上网的方法 public void net(Adapter adapter){ adapter.handleRequest(); } public static void main(String[] args) { //实例化电脑类 Computer computer = new Computer(); //传入一个适配器对象后,电脑可以使用上网功能 computer.net(new Adapter()); } }
-
测试结果
连接成功,可以上网了
总结:次种适配器为类适配器,使用继承的方式实现。在实际的开发中有一定的局限性,所以我们更推荐使用对象适配器。
测试代码二:
-
新建一个适配器类:Adapter2
package pers.mobian.adapter; public class Adapter2 implements UsbToNet { private Adaptee adaptee; public Adapter2() { } //使用构造器的方式,实现与网线端的连用 public Adapter2(Adaptee adaptee) { this.adaptee = adaptee; } @Override public void handleRequest() { adaptee.request(); } }
-
修改电脑类
package pers.mobian.adapter; //电脑端 public class Computer { //上网的方法 public void net(Adapter2 adapter2){ adapter2.handleRequest(); } public static void main(String[] args) { //实例化电脑类 Computer computer = new Computer(); //实例化适配器的组合属性网线属性 Adaptee adaptee = new Adaptee(); //传入一个适配器对象后(内含组合的网线),电脑可以使用上网功能 computer.net(new Adapter2(adaptee)); } }
-
测试结果
连接成功,可以上网了
总结:使用了组合的方式,实现了适配器模式,该方式称为对象适配器模式。
.
总结:
对象适配器的优点:
- 一个对象适配器可以把多个不同的适配者适配到同一个目标
- 可以适配一个适配者的子类,由于适配器和适配者之间是关联关系,根据“里氏代替”原则,适配者的子类也可以通过该适配器进行适配
类适配器的缺点:
- 对于java、C#等不支持多重继承的语言,一次最多只能适配一个适配者类,不能同时适配多个适配者
- 在java、C#等语言中,类适配器模式中的目标抽象类只能为接口,不能为类,其使用有一定的局限性
适用场景:
- 系统需要使用一些现有的类,而这些类的接口(如方法名)不符合系统的需要,甚至没有这些类的源代码
- 想创建一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作
标签:适配,适配器,网线,void,接口,模式,public 来源: https://blog.csdn.net/qq_44377709/article/details/104802053
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。