C C C語言的設計模式 介面隔離

2021-06-16 14:29:49 字數 1683 閱讀 2361

介面隔離:(更好的可參考:《c語言介面與實現》一書

定義為客戶端不應該依賴它不需用的介面,在c語言中我們可以把頭檔案看成乙個模組的介面,根據介面隔離原則也就是說這個標頭檔案中只能包含外部需要的介面,但在實際的專案中往往標頭檔案都不符合介面隔離原則。

1:內、外部介面的隔離:標頭檔案中通常包含了模組內部介面(內部型別定義、內部介面宣告)和外部介面(外部介面宣告)

假設moudle模組對外提供乙個fun1介面,模組內部實現需要定義乙個結構型別,一般的實現如下:

/*moudle.h*/

typedef struct str_s str_t;

struct str_s

;void fun1();

/*moudle.c*/

#include "moudle.h"

void fun1()

;   todo...

}

客戶端在使用介面的時候需要包含moudle.h檔案,而該介面並不符合介面的隔離,其內部包含了客戶並不需要的一些定義。為了解決這個問題我們可以通過定義不同的標頭檔案來隔離介面,moudle.h定義外部的介面,moudle.inc定義內部介面

/*moudle.h*/

void fun1();

/*moudle.inc*/

typedef struct str_s str_t;

struct str_s

;

/*moudle.c*/

#include "moudle.inc"

void fun1()

;   todo...

}

moudle.h包含外部模組需要的介面,外部模組包含moudle.h,moudle.inc包含內部模組需要的介面,在模組內部包含moudle.inc。通過檢視模組的.inc和.h檔案,我們就可以清晰的理解模組對外和對內提供了什麼介面。

2:避免萬能標頭檔案的使用,在實際專案中我們經常可以看到一些標頭檔案包含了所有模組的介面宣告,客戶端只需要包含這個標頭檔案就可以使用任何介面了。

/*global.h*/

#inlcude "moudle1.h"

#inlcude "moudle2.h"

#inlcude "moudle3.h"

....

#inlcude "moudlen.h"

可能帶來如下問題:

會顯著的增加編譯時間,如果專案大,可能大部分的編譯時間都花在展開標頭檔案(筆者乙個專案測試80%左右的時間)。

不利於**的框架的理解,客戶端無法從包含的標頭檔案中清晰的看到依賴什麼外部模組。

3:如果沒有隔離介面可能會導致一些誤操作:(不好說

乙個資料獲取模組提供兩個介面分別從網路和本地快取獲取資料,後台管理模組使用網路介面定時獲取資料更新快取,前台模組使用快取介面快速獲取資料顯示,由於沒有對介面隔離,後期的維護人員可能並不清楚開始的設計,在前台模組中直接使用網路介面來獲取資料顯示,導致介面延遲嚴重。如果一開始就把介面分離,給前台模組提供本地快取介面,給後台模組提供網路介面,就不會導致問題的出現。

設計模式 (介面隔離原則)

介面有兩種型別 建立單一介面,介面盡量要細化,同時介面中的方法盡量少 這回可能會有人問了,這跟單一職責原則不是相同的嗎 單一職責要求的是類和介面職責單一,強調的是職責,業務邏輯上的劃分 介面隔離要求介面的方法盡量少,需要盡量使用多個專門介面 下面舉個例子來說明 車的好壞都是口碑,質量和品牌 好車類 ...

設計模式 介面隔離原則

反例 inte ce inte ce1class b implements inte ce1 override public void operation2 override public void operation3 override public void operation4 overrid...

設計模式 介面隔離原則

設計模式 介面隔離原則 用類圖說明 然後書寫 清單 public inte ce ipettygirl接著,使用具體的類實現 public class pettygirl implements ipettygirl 臉 public void goodlooking 氣質 public void n...