目录
概念
类适配器模式
对象适配器模式
概念
将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。例子:我想用电脑读取TF卡,但是电脑是无法直接读取的,这个时候我们就需要一个读卡器来适配他们两个,让电脑对TF卡可读,这个时候读卡器就充当适配器的角色。
适配器模式分为类结构型模式和对象结构型模式两种,类结构型模式类之间的耦合度比后者高,且要求程序员了解现有组件库中的相关组件的内部结构,所以应用相对较少些。前者不符合合成复用原则。
类适配器模式现象:电脑可读取SD卡,不可直接读取TF卡,想办法让电脑读取TF卡
首先我们需要一个电脑类
public class Computer { //从SD读取数据 public String readSD(SDCard sdCard){ return sdCard.readSD(); } }
电脑有读取SD卡的功能,所以我们应该传入一个具有SDcard实现的类。我们先创建SDcard接口,再创建它的实现类。
//接口 public interface SDCard { //从SD卡读取数据 String readSD(); } //实现 public class SDCardImpl implements SDCard { @Override public String readSD() { return "从SD卡读取数据"; } }
这个时候我们测试用电脑读取SD卡,发现一切正常。
//创建计算机类 Computer computer = new Computer(); //从sd卡读取数据 String msg = computer.readSD(new SDCardImpl()); System.out.println(msg);//从SD卡读取数据
但是我们要做的是读取TF卡
所以,首先我们先要有TFCard接口以及它的实现类
//TF接口 public interface TFCard { //从TF卡读取数据 String readTF(); } //TF实现类 public class TFCardImpl implements TFCard { @Override public String readTF() { return "从TF卡读取数据"; } }
由于无法直接读取TF卡,所以我们加了适配器
//因为电脑可以读取SD卡,所以我们实现SDCard接口 //我们现在想读取TF卡,所以为了使用TF的方法,我们继承了TF的实现类 public class Adapter extends TFCardImpl implements SDCard { @Override public String readSD() { System.out.println("适配读取tf卡"); return readTF(); } }
来看电脑读取TF卡的效果
//创建计算机类 Computer computer = new Computer(); //从适配器读取TF数据 String msg = computer.readSD(new Adapter()); System.out.println(msg); //适配读取tf卡 //从TF卡读取数据对象适配器模式
符合合成复用原则,使用较多。
对于上边代码,主要改写的就是Adapter类。
可以更形象的理解为现实中把TF卡插入读卡器。
public class Adapter implements SDCard { private TFCardImpl tfCard; public Adapter(TFCardImpl tfCard){ this.tfCard = tfCard; } @Override public String readSD() { System.out.println("适配读取tf卡"); return tfCard.readTF(); } }
测试
//创建计算机类 Computer computer = new Computer(); //创建插入TF卡的适配器 Adapter adapter = new Adapter(new TFCardImpl()); //从适配器读取TF数据 String msg = computer.readSD(adapter); System.out.println(msg);
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)