在 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,复杂的实现,后面再说。