子墨对酒《三国杀》里论模式(三)适配器模式

如果你是一个Android程序员,那么你一定对适配器模式情有独钟。如果你还不知道 适配器模式为何物,你还陶醉在自己对AdapterView子类运用的有多熟的暗中自喜中,希望这篇文章能给你当头棒喝。人们常常举电脑适配器的例子作为 适配器模式的具象提现。但我更愿意用USB来举这个例子。当然USB接口也是电脑适配器的一部分。我们知道,不论是什么设备要连接上电脑,其实一根USB 连接线就够了。(如果你非要跟我深究什么打印机什么接口无法USB也没办法)。那么USB连接线就充当了适配器的效果。适配器的存在就是为了对接两个不同 的接口。那么什么叫做对接两个不同的接口呢?就跟现实里的一样。usb和设备的接口采用的是不同的标准,接口自然不一样。对接两个不同的接口的本质目的就 是让你的接口完成另外一个接口所完成的工作。适配器解释成翻译是再好不过的例子了。一个美国人和一个中国人。中间加一个翻译。美国人要和中国人通讯,传递 数据给翻译,翻译将数据再传递给中国人。中国人要和美国人通讯,传递数据给翻译,再由翻译传递给美国人。如果说美国人只和美国人说话的话,那么我们可以将 这时候的翻译看成美国人对象,而跟中国人说话的时候,我们可以将它看成一个中国人对象。适配器模式就是这样,完成两个不同接口的数据传递,或者说功能转 换。

在Android里面,Adapter模式被设计的淋漓尽致。尤其在 AdapterView的设计中,MVC的结构在Adapter的功能成为最耀眼的设计之一。数据和视图本身就是两个完全独立的系统,自然拥有两个完全不 同的系统接口。通过适配器能有效的将这两个接口拼接在一起。我们再次回到三国杀这款游戏。

我们知道,对于同一个用户来说,在不同的模式下是有着不同的样式展现,在等待模式下,你的用户在视图上的呈现可能是这个样子的:


而在游戏进行模式下,你的用户展现形式可能是这样的:


没错~这换一种说法就是MVC,但是我们如果用适配器的观点来看的话,我们定义一下英雄这个数据结构:

class Hero {

    String name;

    List <Image> images;//魔法列表

}

在等待模式视图下我们使用视图1

class View1 ;

战斗模式下我们使用视图2

class View2

View1和View2是完全不同的接口,而数据模型Hero所有的接口一定不会跟View相同,自然会使用适配器。这样数据就和视图解耦,当你要使用新的视图的时候,只需要定义新的适配器就可以。

--非子墨

微博账号: 非子墨
QQ:1025250620
CSDN:《非子墨》的空间

猜你喜欢

转载自1025250620.iteye.com/blog/2015107