結合策略模式談談抽象類與介面

2021-08-30 07:01:45 字數 770 閱讀 2218

最近工作中有這樣乙個場景:

[img]

mediahandler作為乙個處理的類,裡面包含乙個parser介面型別的變數。(其實mediahandler也是作為某介面型別的實現類,這裡省略)

後來我發現在各個parser的實現中有一些公共的**,所以我把它們抽象,提取了乙個abstractparser。

[img]

這樣感覺好多了,可在介面-抽象類-pojo之間,還是總感覺不太對勁。

簡單說一下實際的功能:(如下圖介面定義)

1.介面定義了乙個方法,提取檔案某時間區間的位元組流

2.抽象類實現了這個方法,定義了乙個新的抽象方法,解析多**資訊計算起止位置(讀取檔案用)。

3.具體實現類是分別針對不同的多**檔案對多**資訊進行分析,計算擷取檔案的起止位置。

public inte***ce parser

最後做了如下修改:

[img]

這裡我修改了一下類名,可能會有更有助於理解。

mediahandler裡的屬性我改為了parser:abstractparser

----------------------

總結了一下,因為單繼承,抽象類與具體類之間有嚴格的繼承關係,遵循「is a」的思想。而介面更多的注重表達此類的一種能力,上例就是重在描述此解析器有分析多**資訊的能力。

至於策略模式,無所謂屬性是介面型別還是抽象類。當然介面的用途不完全於此,例如**模式。

各位還有沒有比較好的想法和意見,歡迎補充/指正。

抽象類與介面結合使用

抽象類丶介面的區別 和 抽象類可以不實現介面的全部方法 抽象類可以不用實現介面的全部方法 有的時候需要將介面和抽象類配合起來使用,這樣可以為開發者提供相當的便利性,開發者覺得哪個方便就選用哪個。這樣的抽象類稱為便利類。此時,便利類並不需要實現介面的所有方法,可以留給繼承它的子類去實現它們。這麼做並非...

介面與抽象類

介面與抽象類區別 個人總結 語法結構 1 型別可以繼承多個介面,但是只能繼承乙個抽象類,即不支援多重繼承。2 介面可以用於值型別和引用型別,例如struct和class,而抽象類不能用於值型別,只能用於引用型別。3 抽象類定義可以包括建構函式,字段資料,非抽象成員 具體實現 等,而介面只能包括抽象成...

介面與抽象類

抽象類 當抽象類作為父類時,他的子類對其中的抽象類方法有不同的方法體 簡單舉例為 classhorse mammal,ilangbound public int numeroflegs return 4 inte ce ilandbound int numberoflegs 介面例子 main函式 ...