设计模式(7)---适配器模式

早过忘川 提交于 2020-01-19 23:00:07

在这里插入图片描述

上一篇:原型模式

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)测试结果

在这里插入图片描述
  将读卡器类进行修改之后,我们一样能够实现同样的效果,电脑通过读卡器读取到内存卡上的数据。

下一篇:桥接模式

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!