适配器
拒绝白嫖,白嫖有罪,点个赞再走呗
电脑一般只能读取SD卡,而不能读取TF卡,那么我们想要读取TF卡应该怎么办呢?
当然是通过一个读卡器(适配器)来完成我们的需求。那么我们的程序也是一样的,我们需要用的接口,和能使用的接口不一样怎么办呢——通过适配器就可以了。
类适配器
接下来我们就实现一下这个用例。
首先我们先看一下我们使用的接口
Computer类
package com.yyp.ClassAdapter;
public class Computer {
public String readSD(SDCard sdCard) {
if(sdCard == null) {
throw new NullPointerException("sd card null");
}
return sdCard.readSD();
}
}
这里只能使用SDCard接口。因此我们要做一个适配器来实现可以使用TFCard接口
SDCard接口
package com.yyp.ClassAdapter;
public interface SDCard {
public String readSD();
public void writeSD();
}
TFCard接口
package com.yyp.ClassAdapter;
public interface TFCard {
public String readTF();
public void writeTF();
}
SDCardImpl实现类
package com.yyp.ClassAdapter;
public class SDCardImpl implements SDCard{
@Override
public String readSD() {
String msg = "读取SD卡成功";
return msg;
}
@Override
public void writeSD() {
System.out.println("写入SD卡成功");
}
}
TFCardImpl实现类
package com.yyp.ClassAdapter;
public class TFCardImpl implements TFCard{
@Override
public String readTF() {
String msg = "读取TF卡成功";
return msg;
}
@Override
public void writeTF() {
System.out.println("写入TF卡成功");
}
}
有了上面的SD和TF类之后,我们就可以编写适配器类了,我们需要的是满足SDCard接口的,因此我们的配置器类直接实现SDCard接口,继承TFCardImpl类即可。
SDAdapterTF
package com.yyp.ClassAdapter;
public class SDAdapterTF extends TFCardImpl implements SDCard{
@Override
public String readSD() {
return readTF();
}
@Override
public void writeSD() {
writeTF();
}
}
最后我们来测试一下
package com.yyp.ClassAdapter;
public class Test {
public static void main(String[] args) {
Computer yyp = new Computer();
System.out.println("类适配器");
System.out.println(yyp.readSD(new SDCardImpl()));
System.out.println("=====================");
System.out.println(yyp.readSD(new SDAdapterTF()));
}
}
对象适配器
对象适配器和类适配器的区别就是适配器类的不同,对象适配器是面向目标接口的,将要适配的类作为一个对象封装在一个对象里面。
Computer类
package com.yyp.ObjectAdapter;
public class Computer {
public String readSD(SDCard sdCard) {
if(sdCard == null) {
throw new NullPointerException("sd card null");
}
return sdCard.readSD();
}
}
SDCard接口
package com.yyp.ObjectAdapter;
public interface SDCard {
public String readSD();
public void writeSD();
}
TFCard接口
package com.yyp.ObjectAdapter;
public interface TFCard {
public String readTF();
public void writeTF();
}
SDCardImpl类
package com.yyp.ObjectAdapter;
public class SDCardImpl implements SDCard {
@Override
public String readSD() {
String msg = "读取SD卡成功";
return msg;
}
@Override
public void writeSD() {
System.out.println("写入SD卡成功");
}
}
TFCardImpl类
package com.yyp.ObjectAdapter;
public class TFCardImpl implements TFCard {
@Override
public String readTF() {
String msg = "读取TF卡成功";
return msg;
}
@Override
public void writeTF() {
System.out.println("写入TF卡成功");
}
}
SDAdapterTF类(重点)
package com.yyp.ObjectAdapter;
public class SDAdapterTF implements SDCard {
private TFCard tfCard;
public SDAdapterTF(TFCard tfCard) {
this.tfCard = tfCard;
}
@Override
public String readSD() {
return tfCard.readTF();
}
@Override
public void writeSD() {
tfCard.writeTF();
}
}
测试
package com.yyp.ObjectAdapter;
public class Test {
public static void main(String[] args) {
Computer yyp = new Computer();
System.out.println("对象适配器");
System.out.println(yyp.readSD(new SDCardImpl()));
System.out.println("=====================");
System.out.println(yyp.readSD(new SDAdapterTF(new TFCardImpl())));
}
}