适配器模式
适配器模式(Adapter Pattern)充当两个不兼容接口之间的桥梁。它通过一个中间件(适配器)将一个类的接口转换成客户期望的另一个接口,使原本不能一起工作的类能够协同工作。
结构
- 目标接口:当前对象所期待的接口,是抽象类或者接口。
- 适配者类:被访问的组件接口
- 适配器类:他是一个转换器,通过继承或者引用适配者对象,把适配者接口转换为目标接口。
下图是经典的插座案例图:
对象适配器代码
package wnan.adapter.sd;
/*****UTF-8*****
* Description: sd卡读写接口 目标接口类
* Author: wnan
* Create Date: 2024/10/2 13:25
* Proverbs: 吃得苦中苦,方为人上人
*/
public interface SDCard {
String readSDCar();
void writeSDCard(String info);
}
package wnan.adapter.sd;
/*****UTF-8*****
* Description: sd卡实现
* Author: wnan
* Create Date: 2024/10/2 13:26
* Proverbs: 吃得苦中苦,方为人上人
*/
public class SDCardImpl implements SDCard{
@Override
public String readSDCar() {
return "sd卡数据";
}
@Override
public void writeSDCard(String info) {
System.out.println("写入SD卡"+info);
}
}
package wnan.adapter.tf;
/*****UTF-8*****
* Description: tf读取接口 适配者类接口
* Author: wnan
* Create Date: 2024/10/2 13:27
* Proverbs: 吃得苦中苦,方为人上人
*/
public interface TFCard {
String readTFCar();
void writeTFCard(String info);
}
package wnan.adapter.tf;
/*****UTF-8*****
* Description: tf卡实现
* Author: wnan
* Create Date: 2024/10/2 13:28
* Proverbs: 吃得苦中苦,方为人上人
*/
public class TFCardImpl implements TFCard{
@Override
public String readTFCar() {
return "TF卡数据";
}
@Override
public void writeTFCard(String info) {
System.out.println("写入TF卡"+info);
}
}
package wnan.adapter;
import wnan.adapter.sd.SDCard;
import wnan.adapter.tf.TFCard;
/*****UTF-8*****
* Description: 适配器类
* Author: wnan
* Create Date: 2024/10/2 13:31
* Proverbs: 吃得苦中苦,方为人上人
*/
public class SDAdapter implements SDCard {
private TFCard tfCard;
public SDAdapter(TFCard tfCard){
this.tfCard=tfCard;
}
@Override
public String readSDCar() {
return tfCard.readTFCar();
}
@Override
public void writeSDCard(String info) {
tfCard.writeTFCard(info);
}
}
package wnan.adapter;
import wnan.adapter.sd.SDCard;
import java.util.Optional;
/*****UTF-8*****
* Description: 电脑产品
* Author: wnan
* Create Date: 2024/10/2 13:10
* Proverbs: 吃得苦中苦,方为人上人
*/
public class Computer {
private SDCard sdCard;
public void setSdCard(SDCard sdCard){
this.sdCard = sdCard;
}
public String readSDCar() {
Optional.ofNullable(sdCard).orElseThrow(()->new IllegalStateException("空指针异常"));
return sdCard.readSDCar();
}
public void writeSDCard(String info) {
Optional.ofNullable(sdCard).orElseThrow(()->new IllegalStateException("空指针异常"));
sdCard.writeSDCard(info);
}
}
package wnan.adapter;
import wnan.adapter.sd.SDCard;
import wnan.adapter.tf.TFCardImpl;
/*****UTF-8*****
* Description: 适配器模式 对象适配器模式
* Author: wnan
* Create Date: 2024/10/1 20:56
* Proverbs: 吃得苦中苦,方为人上人
*/
public class Client {
public static void main(String[] args) {
Computer computer = new Computer();
SDCard sdCard =new SDAdapter(new TFCardImpl());
computer.setSdCard(sdCard);
String s = computer.readSDCar();
System.out.println(s);
}
}