设计模式(6)——适配器模式(Adapter)

本文详细解释了适配器模式的概念、应用举例和实现方式,通过实例展示了如何将不同接口进行适配,解决接口不兼容的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Adapter是什么?

出过国的朋友都知道,中国和外国的电源插头不同,出国前要买个适配器,用于适配插座。适配器的作用就是把一个类的接口转换成客户希望的另一个接口。
Adapter的图如下,可以明显看出,对client的call进行了转换。Adaptee指已经存在,需要进行适配的接口。

Adapter可以使用继承和组合两种方式实现。



Adatper的应用举例

1. 读卡器,适配不同的卡。
2. Wrapper,在原来的程序上包一层,用于适配新的情况。


Adapter的示例

为了实现把方形插头变换成圆形插头的功能。


1. 使用继承的方式,即is-a关系
public class CylindricalSocket {
	public String supply(String cylinStem1, String cylinStem1) {
		return ("Power power power...");
	}
}

public class RectangularAdapter extends CylindricalSocket {
	public String adapt(String rectaStem1, Sting rectaStem2) {
		//some conversion logic
		String cylinStem1 = rectaStem1;
		String cylinStem2 = rectaStem2;
		return supply(cylinStem1, cylinStem2);
	}
}

public class RectangularPlug {
	private String rectaStem1;
	private String rectaStem2;
	public getPower() {
		RectangulrAdapter adapter = new RectangulrAdapter();
		String power = adapter.adapt(rectaStem1, rectaStem2);
		System.out.println(power);
	}
}

2. 使用组合关系,即has-a关系
public class CylindricalSocket {
	public String supply(String cylinStem1, String cylinStem1) {
		return ("Power power power...");
	}
}

public class RectangularAdapter {
	private CylindricalSocket socket;

	public String adapt(String rectaStem1, Sting rectaStem2) {
		//some conversion logic
		socket = new CylindricalSocket();
		String cylinStem1 = rectaStem1;
		String cylinStem2 = rectaStem2;
		return socket.supply(cylinStem1, cylinStem2);
	}
}

public class RectangularPlug {
	private String rectaStem1;
	private String rectaStem2;
	public getPower() {
		RectangulrAdapter adapter = new RectangulrAdapter();
		String power = adapter.adapt(rectaStem1, rectaStem2);
		System.out.println(power);
	}
}


链接:http://javapapers.com/design-patterns/adapter-pattern/




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值