java设计模式-适配器模式
模式导读:
每个人都有自己不同的需要,每个人都有自己能够接受的不同方式,就像是为满足现在快速度发展的社会,几乎人人离不开手机的时代,我们也许会碰到在外出行手机电量不足的情况,这个时候如果你在车站,你就会发现一个专门用来手机充电的地方,而手机种类复杂多样,充电的接口也是各有千秋,所以为了适应这种情况,就有了各种各样的接头的出现,而这便是适配器模式的一种使用现实使用场景。
将一个类的接口转换成客户希望的另外一个接口,适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
参考类图:
类适配器实现代码:
1.定义一个抽象USB接口
1 package com.etc; 2 //定义抽象的USB接口 3 public interface USB { 4 void use(); 5 }
2.具体的USB接口
1 package com.etc; 2 //电脑的USB接口 3 public class ComputerUSB implements USB { 4 @Override 5 public void use() { 6 System.out.println("-->电脑成功通过该USB接口进行充电!"); 7 } 8 }
1 package com.etc; 2 3 public class PhoneUSB implements USB { 4 5 @Override 6 public void use() { 7 System.out.println("-->手机成功通过该USB接口来充电!"); 8 } 9 }
3.定义抽象的外部接口(即需要进行转换的抽象接口)
1 package com.etc; 2 //其他的USB接口 3 public interface AnotherUSB { 4 void charge(); 5 }
4.具体的适配器类
1 package com.etc; 2 3 public class ComputerAdapter extends ComputerUSB implements AnotherUSB { 4 5 @Override 6 public void charge() { 7 System.out.println("已成功使用适配器!"); 8 use(); 9 } 10 }
1 package com.etc; 2 3 public class PhoneAdapter extends PhoneUSB implements AnotherUSB{ 4 5 @Override 6 public void charge() { 7 System.out.println("已成功使用适配器!"); 8 use(); 9 } 10 }
5.客户端类
1 package com.etc; 2 //类适配器 3 public class Client2 { 4 public static void main(String[] args) { 5 6 AnotherUSB usb=new ComputerAdapter(); 7 usb.charge(); 8 9 AnotherUSB usb2=new PhoneAdapter(); 10 usb2.charge(); 11 } 12 }
效果截图:
对象适配器代码实现:
1.具体适配器类
1 package com.etc; 2 //电脑充电适配器 3 public class ComputerUSBAdapter extends ComputerUSB implements AnotherUSB{ 4 5 private ComputerUSB cusb; 6 7 public ComputerUSBAdapter(ComputerUSB cusb) { 8 super(); 9 this.cusb = cusb; 10 } 11 //利用该适配器进行接口转换实现充电 12 @Override 13 public void charge() { 14 System.out.println("电脑USB接口已使用该适配器:"); 15 cusb.use(); 16 } 17 }
1 package com.etc; 2 //手机充电适配器 3 public class PhoneUSBAdapter extends PhoneUSB implements AnotherUSB{ 4 5 private PhoneUSB pusb; 6 7 public PhoneUSBAdapter(PhoneUSB pusb) { 8 super(); 9 this.pusb = pusb; 10 } 11 //利用该适配器进行接口转换实现充电 12 @Override 13 public void charge() { 14 System.out.println("手机USB接口已使用该适配器:"); 15 pusb.use(); 16 } 17 }
2.客户端类
1 package com.etc; 2 3 public class Client { 4 5 public static void main(String[] args) { 6 //获取电脑的USB接口 7 ComputerUSB cusb=new ComputerUSB(); 8 //将外部USB接口转化为电脑USB的适配器获取 9 AnotherUSB cAdapter=new ComputerUSBAdapter(cusb); 10 cAdapter.charge(); 11 12 //获取手机的USB接口 13 PhoneUSB pusb=new PhoneUSB(); 14 //将外部USB接口转化为手机USB的适配器获取 15 AnotherUSB pAdapter=new PhoneUSBAdapter(pusb); 16 pAdapter.charge(); 17 } 18 }
效果截图:
适配器模式的优缺点:
优点:
1、可以让任何两个没有关联的类一起运行。
2、提高了类的复用。
3、增加了类的透明度。
4、灵活性好。
缺点:
1.过多地使用适配器,会让系统非常零乱,不易整体进行把握。
2.由于JAVA至多继承一个类,所以至多只能适配一个适配者类,而且目标类必须是抽象类。
适用场景:
1.想要使用一个已经存在的类,但是它却不符合现有的接口规范,导致无法直接去访问,这时创建一个适配器就能间接去访问这个类中的方法。
2.我们有一个类,想将其设计为可重用的类(可被多处访问),我们可以创建适配器来将这个类来适配其他没有提供合适接口的类。
转载于:https://www.cnblogs.com/weekstart/p/10848031.html
java设计模式-适配器模式相关推荐
- Java | 设计模式-适配器模式
继代理模式后又来到适配器模式啦,想看之前的也有哦.持续更新中哦.让我们一起加油吧兄弟们,干他. 很喜欢一句话:"八小时内谋生活,八小时外谋发展". 你好,如果喜欢,请一起坚持!! ...
- java设计模式适配器模式_Java中的适配器设计模式
java设计模式适配器模式 适配器设计模式是一种结构设计模式 ,可以帮助我们连接到通过不同接口公开相似功能的旧版或第三方代码. 适配器的现实世界是我们用来将USB电缆连接到以太网端口的类比. 在设计一 ...
- java设计模式适配器模式_Java解释器设计模式
java设计模式适配器模式 Interpreter design pattern is one of the behavioral design pattern. Interpreter patter ...
- 【设计模式】Java设计模式 - 适配器模式
[设计模式]Java设计模式 - 适配器模式
- JAVA设计模式--适配器模式
目录 1.什么是适配器模式 2.适配器模式的适用场景 3.适配器模式的结构 4.适配器模式应用举例 5.适配器模式的选择 参考文章 1.什么是适配器模式 适配器(Adapter)模式又叫做包装( Wr ...
- Java设计模式——适配器模式【Adapter Pattern】
一.引言 23种设计模式大概分为三大类: 5种(创建型模式):工厂方法模式.抽象工厂模式.单例模式.原型模式.建造者模式. 7种(结构型模式):适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组 ...
- java设计模式---适配器模式
类适配器 客户的开发人员定义了一个接口,期望用这个接口来完成整数的求和操作,接口定义如下: Java代码 public interface Operation{ public in ...
- Java设计模式 - 适配器模式
概述 将一个类的接口转换成客户希望的另外一个接口.适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 构造器模式 上面的概述可能不是太容易理解,下面举一个例子说明适配器模式的应用. ...
- Java设计模式-适配器模式Adapter
定义:"转换接口" 将一个类的接口转换成客户希望的另外一个接口.Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作. 我理解的"一个类的接口&q ...
最新文章
- python微信好友分析源代码_Python实现微信好友的数据分析
- 20165212第九周学习总结
- 设计Qt风格的C++API
- Database之SQLSever:SQL命令实现的高级案例集合之单表/多表(筛选、统计个数)之详细攻略
- spring aop JointPoint类
- [转载]C#中注册Dll的问题
- 让我们回顾一下如何通过JDBC插入Clob或Blob
- 中美共建大数据创新研究中心
- mybatis foreach collection
- CentOS7下使用yum安装MariaDB
- 下一代iPhone将变成“越南制造”?富士康已在越南买地
- 现在程序员的工资是不是被高估了?不存在的!
- mysql 锁行语句_mysql 锁表锁行语句分享(MySQL事务处理)
- ElementUI-自定义模板包含编辑与删除的功能
- IDC:大数据——数字化转型时代的大商机
- 六、 抽象类与接口对比
- 11.Doctrine2 (3)
- Atitit .h5文件上传
- UE4 Linux交叉编译Clang下载
- html页面如何嵌入word在线编辑器,网页word编辑器 网页中如何嵌入word编辑器
热门文章
- python采集bandwidth信息
- 【Qt】Qt再学习(七):QLocalServer、QLocalSocket
- Travis CI : 最小的分布式系统(二)
- easyexcel生成excel_阿里JAVA解析Excel工具easyexcel
- java changelistener_ListChangeListener.Change
- 位运算+取某一位+java_Java位运算小节
- jq修改iframe html代码,jQuery控制iFrame(实例代码)
- Java项目:前后端分离疫情防疫平台设计和实现(java+springmvc+VUE+node.js+mybatis+mysql+springboot+redis+jsp)
- android系统的iphone,iPhone上安装Android系统详细步骤。
- mysql计算两gps坐标的距离_mysql 计算两坐标间的距离