适配器注意
使用场景:有动机地修改一个正常运行的系统的接口,这时应该考虑使用适配器模式。
注意事项:适配器不是在详细设计时添加的,而是解决正在服役的项目的问题。
适配器关键点
适配器的关键就是,将被适配者加载到已经定义好的或在运行的系统中.适配器需要实现目前运行系统中的接口,并转成被适配者需要的格式.
适配器例子
笔记本通过读卡去读取TF卡;
一、先模拟计算机读取SD卡:
1、先创建一个SD卡的接口:
public interface SDCard {
//读取SD卡方法
String readSD();
//写入SD卡功能
int writeSD(String msg);
}
2、创建SD卡接口的实现类,模拟SD卡的功能:
public class SDCardImpl implements SDCard {
@Override
public String readSD() {
String msg = “sdcard read a msg :hello word SD”;
return msg;
}
@Override
public int writeSD(String msg) {
System.out.println("sd card write msg : " + msg);
return 1;
}
}
3、创建计算机接口,计算机提供读取SD卡方法:
public interface Computer {
String readSD(SDCard sdCard);
}
4、创建一个计算机实例,实现计算机接口,并实现其读取SD卡方法:
public class ThinkpadComputer implements Computer {
@Override
public String readSD(SDCard sdCard) {
if(sdCard == null)throw new NullPointerException(“sd card null”);
return sdCard.readSD();
}
}
5、这时候就可以模拟计算机读取SD卡功能:
public class ComputerReadDemo {
public static void main(String[] args) {
Computer computer = new ThinkpadComputer();
SDCard sdCard = new SDCardImpl();
System.out.println(computer.readSD(sdCard));
}
}
二、接下来在不改变计算机读取SD卡接口的情况下,通过适配器模式读取TF卡:
1、创建TF卡接口:
public interface TFCard {
String readTF();
int writeTF(String msg);
}
2、创建TF卡实例:
public class TFCardImpl implements TFCard {
@Override
public String readTF() {
String msg =“tf card reade msg : hello word tf card”;
return msg;
}
@Override
public int writeTF(String msg) {
System.out.println("tf card write a msg : " + msg);
return 1;
}
}
3、创建SD适配TF (也可以说是SD兼容TF,相当于读卡器):
实现SDCard接口,并将要适配的对象作为适配器的属性引入。
public class SDAdapterTF implements SDCard {
private TFCard tfCard;
public SDAdapterTF(TFCard tfCard) {
this.tfCard = tfCard;
}
@Override
public String readSD() {
System.out.println("adapter read tf card ");
return tfCard.readTF();
}
@Override
public int writeSD(String msg) {
System.out.println(“adapter write tf card”);
return tfCard.writeTF(msg);
}
}
4、通过上面的例子测试计算机通过SD读卡器读取TF卡:
public class ComputerReadDemo {
public static void main(String[] args) {
Computer computer = new ThinkpadComputer();
SDCard sdCard = new SDCardImpl();
System.out.println(computer.readSD(sdCard));
System.out.println("====================================");
TFCard tfCard = new TFCardImpl();
SDCard tfCardAdapterSD = new SDAdapterTF(tfCard);
System.out.println(computer.readSD(tfCardAdapterSD));
}
}
输出:
adapter read tf card
tf card reade msg : hello word tf card
在这种模式下,计算机并不需要知道具体是什么卡,只需要负责操作接口即可,具体操作的什么类,由适配器决定。