在 android 编程中,形形色色的 Adapter 到处可见,其复杂的设计让人惊嘘不已!
结合自己的亲身体会,跟大家聊聊适配器这这种设计模式。
欢迎拍砖!
很形象的一个例子
现在你手头上有一台笔记本,需要充电,不然最后一关抢宝藏的游戏可能要泡汤了,怎么办?
很简单,找个适配器充电呗!
于是乎,适配器找到了,电源是现成的,终于可以重新开战了!
这个过程很简单,但是蕴涵了今天所说的适配器(Adapter)。
试想一下,没有适配器的话,你不可能把 220V 的电压直接接在你心爱的笔记本上面吧?!
适配器,简单来说就是整合已有的资源供别人使用的一个工具。
软件实现
具体实现有两中方式,使用继承或者聚合(可以说是委派)。
Power.java
package mark.zhang;
public class Power {
public void supply() {
System.out.println("power is suppling voltage......");
}
}
IConvertor.java
package mark.zhang;
public interface IConvertor {
public abstract void convert();
}
PC.java
package mark.zhang;
public class PC {
Adapter mAdapter;
public void setAdapter(Adapter adapter) {
mAdapter = adapter;
mAdapter.convert();
work();
}
public void work() {
System.out.println("pc is working......");
}
}
接下来可以设计 Adapter
聚合的方式实现 Adapter.java
package mark.zhang;
public class Adapter implements IConvertor {
Power power;
public Adapter() {
power = new Power();
}
@Override
public void convert() {
power.supply();
}
}
简单的实现了 Power 适配器。
继承的方式实现 Adapter.java
package mark.zhang;
public class Adapter extends Power implements IConvertor {
@Override
public void convert() {
supply();
}
}
客户端调用 Client.java
package mark.zhang;
public class Client {
public static void main(String[] args) {
PC pc = new PC();
Adapter a = new Adapter();
pc.setAdapter(a);
}
}
可以看出,无论那种方式实现 Adapter,Adapter 都实现了接口方法,目的就是调用 Power 的 supply.
但是这种简单的实现缺点还是很多的
比如,各个类设计过于具体(相对于抽象来说),程序没有弹性,没有面向抽象(或者接口)编程的思想。
还好,今天只是介绍一下 Adapter,复杂的实现,后面再说。