Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说Java之适配器模式(Adapter),希望能够帮助你!!!。
1.设计意图
适配器模式是将一个类的接口转换成另一个类想要的接口,适配器让原本两个不兼容的类能够兼容。
2. 演示案例
现实生活中我们到处都可以看到适配器
简而言之
适配器模式允许你在适配器中包装一个原本不兼容的对象,使其与另外一个类兼容
维基百科:
在软件工程中,适配器模式是一种软件设计模式,它允许现有类的接口作用于另外一个接口。它通常用于在不修改源代码的前提下使现有的类能够与其他类一起工作。
3. 程序示例
我们就以SD卡通过读卡器将数据传输到电脑中为案例来讲解适配器模式。
首先我们创建一个存储卡类和一个数据传输接口。存储卡类中有一个现实内存大小的方法:memory();数据传输接口中定义两个方法:read()和write();
SDCard.java
package com.ramostear.pattern.adapter; /** * @author ramostear * @create-time 2019/1/4 0004-19:41 * @modify by : * @info:[存储卡类] * @since: */ public class SDCard { public void memory(){ System.out.println("8GB"); } }
DataTransfer.java
package com.ramostear.pattern.adapter; /** * @author ramostear * @create-time 2019/1/4 0004-19:54 * @modify by : * @info:[数据传输接口] * @since: */ public interface DataTransfer { void read(); void write(); }
接下来我们将定义一个读卡器类,并将SD卡 “插入” 读卡器中,且实现数据读写接口
CardReader.java
package com.ramostear.pattern.adapter; /** * @author ramostear * @create-time 2019/1/4 0004-19:56 * @modify by : * @info:[读卡器] * @since: */ public class CardReader implements DataTransfer{ private SDCard sdCard; public CardReader() { this.sdCard = new SDCard(); } @Override public void read() { sdCard.memory(); System.out.println("read data from sdCard..."); } @Override public void write() { sdCard.memory(); System.out.println("write data to sdCard..."); } }
然后我们定义一个计算机类,预留“USB”的接口,并设置数据读写入口
Computer.java
package com.ramostear.pattern.adapter; /** * @author ramostear * @create-time 2019/1/4 0004-20:01 * @modify by : * @info:[计算机类] * @since: */ public class Computer { private DataTransfer dataTransfer; public Computer(){} public Computer(DataTransfer dataTransfer){ this.dataTransfer = dataTransfer; } public DataTransfer getDataTransfer() { return dataTransfer; } public void setDataTransfer(DataTransfer dataTransfer) { this.dataTransfer = dataTransfer; } public void read(){ dataTransfer.read(); } public void write(){ dataTransfer.write(); } }
最后,让我们将装入SD卡的读卡器插入到计算机的USB口中,启动计算机并对SD卡中的数据进行读写
App.java
package com.ramostear.pattern.adapter; /** * @author ramostear * @create-time 2019/1/4 0004-20:04 * @modify by : * @info:[测试类] * @since: */ public class App { public static void main(String[] args){ /** * 1. 将SD卡插入读卡器 * 2. 将读卡器插入电脑USB接口 * 3. 电脑开机 * 4. 从SD卡中读入数据到电脑,或者将输入从电脑中写入SD卡 */ Computer computer = new Computer(new CardReader()); computer.read(); computer.write(); } }
控制台输出:
至此,适配器模式设计实现完成。
4. 适用场景
当满足(不限于)以下应用场景时:
5. 使用建议
5.1 类适配器
由于类适配器是适配者类的子类,因此可以在适配器类中调整适配者类中的方法,使得适配器的灵活性更强。但是如果在Java这样的单继承语言中,一次最多只能适配一个适配者类,且目标抽象类只能为接口,不能为类。
5.2 对象适配器
把多个不同的适配者适配到同一个目标类,同一个适配器可以把适配者和它的子类都适配到一个目标接口。
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。