适配器模式(Adapter)

本文详细介绍了适配器模式的概念,包括其主要角色:目标接口、需要适配的类及适配器。通过实例说明了如何使用两种适配器模式(类适配器和对象适配器)解决接口不兼容的问题。

适配器模式

将一个类的接口转换为客户希望的另一个接口。使原本由于接口不兼容而不能一起工作的类可以在一起工作。
主要角色:
目标接口(Target): 客户期待的接口。目标可以是具体或抽象的类,或接口。
需要适配的类(Adaptee)
适配器(Adapter):通过包装一个需要适配的对象,将原接口转换为目标接口。

举个例子:
笔记本电脑只有usb接口,需要连接一个ps/2键盘。

这里笔记本电脑就是客户端,需要调用ps/2键盘,但是它只有usb接口,不兼容,无法调用,目标接口就是usb,键盘就是需要适配的类,那么需要一个转换器实现适配。

实现

Adaptee:

// 需要适配的类。例子中的键盘。
public class Adaptee {
	public void request() {
		System.out.println("可以完成客户需要的功能!");
	}
}

Target:

// 目标接口。例子中的usb。
public interface Target {
	void handleReq();
}

Adapter:
有两种适配器模式:
一种是类适配器:
适配器继承了要适配的类, 同时它实现了目标接口。

public class Adapter extends Adaptee implements Target {
	
	@Override
	public void handleReq() {
		super.request();
	}
	
}

另一种是对象适配器:使用组合的方式与被适配对象整合。

public class Adapter2 implements Target {
	
	private Adaptee adaptee;
	
	@Override
	public void handleReq() {
		adaptee.request();
	}

	public Adapter2(Adaptee adaptee) {
		super();
		this.adaptee = adaptee;
	}
	
}

对应的客户端也就有两种写法:

public class Client {

	public static void main(String[] args) {
		Client c = new Client();
		Adaptee a = new Adaptee();
		// Target t = new Adapter(); // 写法一:类适配器
		Target t = new Adapter2(a); //写法二:对象适配器
		c.test1(t);
	}
	
	public void test1(Target t) {
		t.handleReq();
	}

}

应用场景

旧系统的改造升级
java.io.InputStreamReader(InputStream) —>字节流通过适配器转化为字符流
java.io.OutputStreamWriter(OutputStream)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值