原创文章,转载请注明出处,谢谢!
作者:清林,博客名:飞空静渡
我们知道,c++的多态可以为不同的实现提供同一个接口,适配器模式也可以让同一接口得到不同的实现。下面我们通过一个例子来说明这两个东东 :)
假设,我要设计一套对磁盘分区进行操作的类,这个类有三个接口,分别用于打开磁盘,读磁盘,写磁盘和关闭打开的磁盘。这里,我们可以封装系统对磁盘读写的函数。
在linux或unix下这些函数是:open、read、write和close。
在windows下,这些函数是:CreateFile、ReadFile、WriteFile和CloseHandle。
当对磁盘读写时,这两套APIs是有很大差别的,一个大的差别是,windows下的这些函数对磁盘操作是以扇区为单位的。
现在,我们就用多态的方法来设计这个类,如下是这些类的伪代码:
如果要使用,就可能是这样的:
上面所说的就是利用c++的多态来实现不同平台的io操作。
但是,如果我已经做好了一个项目,这个项目是linux下的,并且我也不想改变代码并移植到wndows下呢,我们该对上面的代码如何改变。
下面使用适配器模式来做:
现在我们已经有了linux下的这个操作类:
因此,我们同样设计一个类似的针对wndows下的io类:
并且定义相应的适配器类:
这样,我们就可以这样使用了
适配器模式是在没有改变代码的情况下,把各个功能封装起来达到统一使用的功能。