把一个类接口转换成另一个用户需要的接口。

适配器 - 图1

一、笔记本通过SD读卡去读取TF

①、先模拟计算机读取SD卡:

1、先创建一个SD卡的接口:

  1. public interface SDCard {
  2. /*读取SD卡方法*/
  3. String readSD();
  4. /*写入SD卡功能*/
  5. int writeSD(String msg);
  6. }

2、创建SD卡接口的实现类,模拟SD卡的功能:

  1. public class SDCardImpl implements SDCard {
  2. @Override
  3. public String readSD() {
  4. String msg = "SD card read a msg :hello word SD";
  5. return msg;
  6. }
  7. @Override
  8. public int writeSD(String msg) {
  9. System.out.println("SD card write msg : " + msg);
  10. return 1;
  11. }
  12. }

3、创建计算机接口,计算机提供读取SD卡方法:

  1. public interface Computer {
  2. String readSD(SDCard sdCard);
  3. }

4、创建一个计算机实例,实现计算机接口,并实现其读取SD卡方法:

  1. public class ThinkpadComputer implements Computer {
  2. @Override
  3. public String readSD(SDCard sdCard) {
  4. if (sdCard == null) {
  5. throw new NullPointerException("sd card null");
  6. }
  7. return sdCard.readSD();
  8. }
  9. }

5、模拟计算机读取SD卡功能:

  1. public class Client {
  2. public static void main(String[] args) {
  3. SDCard sdCard = new SDCardImpl();
  4. Computer computer = new ThinkpadComputer();
  5. String msg = computer.readSD(sdCard);
  6. System.out.println("msg = " + msg);
  7. }
  8. }

输出如下:

  1. msg = SD card read a msg :hello word SD

②、接下来在不改变计算机读取SD卡接口的情况下,通过适配器模式读取TF卡:

1、创建TF卡接口:

  1. public interface TFCard {
  2. /*读取TF卡方法*/
  3. String readTF();
  4. /*写入TF卡功能*/
  5. int writeTF(String msg);
  6. }

2、创建TF卡实例:创建TF卡接口的实现类,模拟TF卡的功能:

  1. public class TFCardImpl implements TFCard {
  2. @Override
  3. public String readTF() {
  4. String msg = "TF card reade msg : hello word tf card";
  5. return msg;
  6. }
  7. @Override
  8. public int writeTF(String msg) {
  9. System.out.println("TF card write a msg : " + msg);
  10. return 1;
  11. }
  12. }

3、创建SD适配TF (也可以说是SD兼容TF,相当于读卡器),实现SDCard接口,并将要适配的对象作为适配器的属性引入。具体如下:

  1. public class SDAdapterTF implements SDCard {
  2. private TFCard tfCard;
  3. public SDAdapterTF(TFCard tfCard) {
  4. this.tfCard = tfCard;
  5. }
  6. @Override
  7. public String readSD() {
  8. System.out.println("adapter read TF card ......");
  9. return tfCard.readTF();
  10. }
  11. @Override
  12. public int writeSD(String msg) {
  13. System.out.println("adapter write TF card ......");
  14. return tfCard.writeTF(msg);
  15. }
  16. }

4、测试计算机通过SD读卡器读取TF卡:

  1. public class Client {
  2. public static void main(String[] args) {
  3. TFCard tfCard = new TFCardImpl();
  4. SDAdapterTF adapter = new SDAdapterTF(tfCard);
  5. Computer computer = new ThinkpadComputer();
  6. computer.readSD(adapter);
  7. }
  8. }

输出如下:

  1. adapter read TF card ......

二、使用适配器模式,将火鸡冒充鸭子

鸭子(Duck)和火鸡(Turkey)拥有不同的叫声,Duck 的叫声调用 quack() 方法,而 Turkey 调用 gobble() 方法。

要求:将 Turkeygobble() 方法适配成 Duckquack() 方法,从而让火鸡冒充鸭子!

1、先创建一个Duck接口:

  1. /**
  2. * 鸭子
  3. */
  4. public interface Duck {
  5. /*嘎嘎叫*/
  6. void quack();
  7. }

2、先创建一个Turkey接口:

  1. /**
  2. * 火鸡
  3. */
  4. public interface Turkey {
  5. /*咯咯叫*/
  6. void gobble();
  7. }

3、创建Turkey接口的实现类,模拟Turkey的功能:

  1. public class WildTurkey implements Turkey{
  2. @Override
  3. public void gobble() {
  4. System.out.println("gobble......");
  5. }
  6. }

3、创建Duck适配Turkey (也可以说是Duck兼容Turkey,相当于让火鸡冒充鸭子),实现Duck接口,并将要适配的对象作为适配器的属性引入。具体如下:

要求将 Turkeygobble() 方法适配成 Duckquack()方法,从而让火鸡冒充鸭子!

  1. public class DuckAdapterTurkey implements Duck {
  2. private Turkey turkey;
  3. public TurkeyAdapter(Turkey turkey) {
  4. this.turkey = turkey;
  5. }
  6. @Override
  7. public void quack() {
  8. turkey.gobble();
  9. }
  10. }

4、测试通过DuckAdapterTurkey适配器,让火鸡冒充鸭子:

  1. public class Client {
  2. public static void main(String[] args) {
  3. Turkey turkey = new WildTurkey();
  4. DuckAdapterTurkey adapter = new DuckAdapterTurkey(turkey);
  5. adapter.quack();
  6. }
  7. }

输出如下:

  1. gobble......