Java基础知识之设计模式--适配器模式
Java设计模式--适配器模式
声明:本文根据慕课网tuohuangs老师的精品课程整理来的:慕课网
什么是设计模式(Design Pattern)?
设计模式是一套被反复使用,多数人知晓的,经过分类编目的,代码设计经验的总结。
适配器模式的定义?
适配器模式是将一个类的接口,转换成客户期望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。
适配器模式实现方式?
1.使用组合方式实现:把“被适配者”作为一个对象组合到适配器类中,以修改目标接口包装被适配者。
2.使用继承方式实现:通过多重继承不兼容接口,实现对目标接口的匹配,单一的为某个类而实现适配。
适配器模式的作用:
1.透明:通过适配器,客户端可以调用同一接口,因而对客户端来说是透明的。这样做更简单,更直接,更紧凑。
2.重用:复用了现存的类,解决了现存类和复用环境要求不一致的问题。
3.低耦合:将目标类和适配者类解耦,通过引入一个适配器类重用现有的适配者类,而无需修改原代码,(遵循开闭原则)。
适配器模式实例:
1.首先创建一个目标接口
1 /** 2 * 目标接口类(三相插座接口) 3 * @author Administrator 4 * 5 */ 6 public interface ThreePlugIf { 7 //目标方法(使用三相电流供电) 8 public void powerWhitThree(); 9 }
2.创建一个原有类,也就是不匹配类
1 /** 2 * 原始类,不匹配类 3 * @author Administrator 4 * 5 */ 6 public class GBTwoPlug { 7 8 //使用二相电流供电 9 public void powerWithTwo(){ 10 System.out.println("使用二相电流供电"); 11 } 12 }
3.创建客户端,规定适配类
/** * 客户端类,明确使用三相插头 * @author Administrator * */ public class NoteBook { private ThreePlugIf plug; //创建构造方法,明确使用三相插头 public NoteBook(ThreePlugIf plug) { this.plug = plug; } //使用三相插座充电 public void charge(){ plug.powerWhitThree(); } }
4.创建组合适配器
1 /** 2 * 适配器,把二相插头转换成三相插头 3 * @author Administrator 4 * 5 */ 6 public class TwoPlugAdapter implements ThreePlugIf { 7 //需要转换的类 8 private GBTwoPlug twoPlug; 9 10 public TwoPlugAdapter(GBTwoPlug twoPlug) { 11 this.twoPlug = twoPlug; 12 } 13 @Override 14 public void powerWhitThree() { 15 System.out.println("通过转换"); 16 twoPlug.powerWithTwo(); 17 } 18 19 }
5.组合适配器测试类
1 public class Test { 2 3 public static void main(String[] args) { 4 GBTwoPlug twoPlug = new GBTwoPlug(); 5 //需要使用适配器把二相的转换成三相的 6 ThreePlugIf threePlug = new TwoPlugAdapter(twoPlug); 7 NoteBook noteBook = new NoteBook(threePlug); 8 noteBook.charge(); 9 } 10 11 }
6.创建继承适配器
1 /** 2 * 采用继承方式的插座适配器 3 * @author Administrator 4 * 5 */ 6 public class TwoPlugAdapterExtends extends GBTwoPlug implements ThreePlugIf { 7 8 @Override 9 public void powerWhitThree() { 10 System.out.println("借助继承适配器"); 11 //使用继承父类中的方法 12 this.powerWithTwo(); 13 14 } 15 16 }
7.继承适配器测试类
1 public class Test1 { 2 3 public static void main(String[] args) { 4 //创建继承测试类 5 ThreePlugIf threePlug = new TwoPlugAdapterExtends(); 6 NoteBook noteBook = new NoteBook(threePlug); 7 noteBook.charge(); 8 } 9 10 }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· Blazor Hybrid适配到HarmonyOS系统
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· 分享4款.NET开源、免费、实用的商城系统
· 解决跨域问题的这6种方案,真香!
· 一套基于 Material Design 规范实现的 Blazor 和 Razor 通用组件库