上一篇:原型模式
1.什么是适配器模式?
下面这个读卡器的性质就能够非常清晰的表示这个问题:
读卡器
作为内存卡
和电脑
之间的沟通桥梁,使得我们可以通过笔记本来存取内存卡上面的数据。
官方一点的解释:
适配器模式是作为两个完全独立不兼容的接口的连接桥梁。在适配器模式中我们定义一个类,该类负责加入独立的接口功能。
2.适配器模式的优缺点?
1)优点:
使两个毫无关系的类能够一起合作运行,提高了类的复用性。2)缺点:
提高了代码的复杂性,如果没有必要,尽量少用此模式(个人建议)适配器模式更多用于已正常运行的项目进行维护升级
3.适配器模式怎么使用?
2.1 类继承
1)定义内存卡类
内存卡拥有存储功能,其他设备连接上内存卡后可以访问其存储的数据。/**
* 定义内存卡接口
*/
public class MemoryCard {
/**
* 内存卡的存储功能
*/
void storage() {
System.out.println("从内存卡中获取存储的文件");
}
}
2)定义读卡器类
读卡器类就是将电脑和内存卡两个互相独立的类进行连接整合,它既有电脑的USB插口,也有内存卡的插口。
/**
* 定义 读卡器 接口
*/
public class CardReader extends MemoryCard implements USBInterface {
@Override
public void handleRequest() {
//调取由内存卡存储的文件
super.storage();
}
}
3)定义电脑类
电脑上的read()
表示读取文件的功能。
/**
* 定义 电脑 类
*/
public class Computer {
/**
* 读取文件
* <p>
* 电脑插上读卡器才可以读取内存卡的数据
*/
void read(CardReader cardReader) {
cardReader.handleRequest();
}
}
4)定义测试类
/**
* 定义 从测试类
*/
public class Test {
public static void main(String[] args) {
Computer computer = new Computer();
CardReader cardReader = new CardReader();
comcomputer.read(cardReader);
}
}
5)测试结果
我们使用comcomputer.read(cardReader);
使用了电脑读取了内存卡上面的数据。
但是!
因为java中的类使单继承的,这种方式使用起来具有一定的局限性,所以更加推荐使用第二种方式:组合
或者说是对象适配器
的方式来进行实现
2.1 类继承
1)修改 读卡器 类
/**
* 定义 读卡器 接口
*/
public class CardReader implements USBInterface {
private MemoryCard memoryCard;
public CardReader(MemoryCard memoryCard) {
this.memoryCard = memoryCard;
}
@Override
public void handleRequest() {
//调取由内存卡存储的文件
memoryCard.storage();
}
}
2)编写测试类
/**
* 定义 从测试类
*/
public class Test {
public static void main(String[] args) {
Computer computer = new Computer();
MemoryCard memoryCard = new MemoryCard();
//将内存卡插到读卡器上
CardReader cardReader = new CardReader(memoryCard);
//将读卡器插到电脑上
computer.read(cardReader);
}
}
3)测试结果
将读卡器类进行修改之后,我们一样能够实现同样的效果,电脑通过读卡器读取到内存卡上的数据。