C++的多型與介面卡模式
阿新 • • 發佈:2019-02-01
原創文章,轉載請註明出處,謝謝!
作者:清林,部落格名:飛空靜渡
我們知道,c++的多型可以為不同的實現提供同一個介面,介面卡模式也可以讓同一介面得到不同的實現。下面我們通過一個例子來說明這兩個東東 :)
假設,我要設計一套對磁碟分割槽進行操作的類,這個類有三個介面,分別用於開啟磁碟,讀磁碟,寫磁碟和關閉開啟的磁碟。這裡,我們可以封裝系統對磁碟讀寫的函式。
在linux或unix下這些函式是:open、read、write和close。
在windows下,這些函式是:CreateFile、ReadFile、WriteFile和CloseHandle。
當對磁碟讀寫時,這兩套APIs是有很大差別的,一個大的差別是,windows下的這些函式對磁碟操作是以扇區為單位的。
現在,我們就用多型的方法來設計這個類,如下是這些類的虛擬碼:
如果要使用,就可能是這樣的:
上面所說的就是利用c++的多型來實現不同平臺的io操作。
但是,如果我已經做好了一個專案,這個專案是linux下的,並且我也不想改變程式碼並移植到wndows下呢,我們該對上面的程式碼如何改變。
下面使用介面卡模式來做:
現在我們已經有了linux下的這個操作類:
因此,我們同樣設計一個類似的針對wndows下的io類:
並且定義相應的介面卡類:
這樣,我們就可以這樣使用了
介面卡模式是在沒有改變程式碼的情況下,把各個功能封裝起來達到統一使用的功能。