在设计模式中,适配器模式(英语:adapter pattern)有时候也称包装样式或者包装(wrapper)。将一个类的接口转接成用户所期待的。一个适配使得因接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。
比如我们去日本买了一个日本的电饭煲,但日本电压标准都是110v,而我们国家标准是220v,所以要想在中国用日本电饭煲,需要一个电源适配器。
比如我们有一个micro sd卡,如果我们想在笔记本上用,就需要一个读卡器做为适配器
java jdk 1.1 提供了 enumeration 接口,而在 1.2 中提供了 iterator 接口,想要使用 1.2 的 jdk,则要将以前系统的 enumeration 接口转化为 iterator 接口,这时就需要适配器模式。
java 中的 jdbc。
系统需要使用现有的类,而此类的接口不符合系统的需要。
想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口。
通过接口转换,将一个类插入另一个类系中。(比如老虎和飞禽,现在多了一个飞虎,在不增加实体的需求下,增加一个适配器,在里面包容一个虎对象,实现飞的接口。)
优点:
1. 可以让任何两个没有关联的类一起运行。
2. 提高了类的复用。
3. 增加了类的透明度。
4. 灵活性好。
缺点:
1. 过多地使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是 a 接口,其实内部被适配成了 b 接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。
2. 由于 java 至多继承一个类,所以至多只能适配一个适配者类,而且目标类必须是抽象类。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI5cTM0MDNwETM1ITNwYTMwIzLcRXZu5ibkN3Yuc2bsJmLn1Wavw1LcpDc0RHaiojIsJye.jpg)
我们就拿日本电饭煲的例子进行说明,日本电饭煲电源接口标准是110v电压,而中国标准电压接口是220v,所以要想在中国用日本电饭煲,需要一个电源转换器。
我们先定义日本220v电源接口和实现。
110v接口:
110V接口实现:
我们再定义中国220v电源接口和实现。
220v接口:
220v接口实现:
要想在中国使用日本电饭煲,需要把电饭煲110v的电源接口适配成我们220v的电源接口,这就需要一个电源适配器:
适配器继承的是要适配的接口,并持有对客户的接口的引用。
下面正式开始啦,现在我们有一个日本电饭煲,用的是110v的电源接口:
电饭煲用的是110v接口
测试类:
适配器继承了110v接口,就可以用于日本电饭煲;适配器又持有220v接口的引用,就可以用220v进行工作。
运行结果: