版权声明:本文为 冬夏 原创发表在公众号「Android从入门到精通」,可以随意转载,但请注明出处。
适配器模式(Adapter)是我们在开发过程中经常会用到的一个设计模式。它的作用是将一个类的接口,转换另一个接口。
那么为什么要进行转换呢?想想生活的例子你就知道了。设想一下,你出国旅游,发现你的手机的充电器不能插进当地的插座,因为标准不同。这时候你会买一个转接器,然后解决了这个问题。这个转接器就是适配器,适配器模式也就是为了解决这一类问题而存在的。
我们回想一下转接器的工作原理:转接器一般由两面组成,一面是适配你的手机充电器插头的插座,另一面是适配当地插座的插头。你将你的手机充电器插进转接器,再将转接器插进当地的插座,就完成了适配。
适配器模式UML图如下:
适配器模式UML.png
由此我们可以总结一下适配器模式的要点:
- 适配器将一个对象包装起来以改变其接口以符合用户要求。
那么我们如何用代码的形式实现适配器模式呢?假设我们现在有这么一个情景:现在手头上有一个遥控,上面有“上”和“下”两个按钮,但是我们希望用它来控制一个风扇的开关,这样就有了一个从“上”和“下”到“开”和“关”的转换。这种情况下就可以用到适配器模式了。
首先是风扇类,非常简单,有 on 和 off 两个方法
public class Fan {
public void on(){
System.out.println("The fan is on");
}
public void off(){
System.out.println("The fan is off");
}
}
接着是遥控类,也非常简单,有 up 和 down 两个 方法
public class Controler {
public void up(){
System.out.println("The up button is pressed");
}
public void down(){
System.out.println("The down button is pressed");
}
}
接着就是我们的适配器接口,上面和风扇一样有 on 和 off 两个方法。
public interface Adapter {
void on();
void off();
}
接下来,我们把遥控和适配器组合起来,变成了风扇遥控器,按下 up 按钮就是风扇开,按下 down 按钮就是风扇关。
public class FanControler extends Controler implements Adapter {
private Fan mFan;
public FanControler(Fan fan){
mFan = fan;
}
@Override
public void up() {
on();
}
@Override
public void down() {
off();
}
@Override
public void on() {
mFan.on();
}
@Override
public void off() {
mFan.off();
}
}
接下来我们就可以运行起来了:
public class Main {
public static void main(String[] agrs){
Fan fan = new Fan();
Controler fanControler = new FanControler(fan);
fanControler.up();
fanControler.down();
}
}
运行结果如下:
The fan is on
The fan is off
由此可见,我们成功地将只有上和下两个按钮的遥控转换成了能够控制风扇开关的遥控器。
总结一下:
适配器模式能够将一个接口转换成另一个接口。具体是通过实现待转换的接口,同时持有目标接口,在内部进行接口转换实现的。
欢迎关注我的个人公众号,一起学习Android、Java、设计模式等技术!
Android从入门到精通
网友评论