關於Interface與純虛函數在設計中的區別

來源:互聯網
上載者:User

因為之前一直做C++,沒有特別研究過Java、C#中的Interface概念。

在看設計模式的時候,也弄得一知半解的。

 

今天在做GDE-X過程中,我想定義一個類似於 c++的純虛函數的,衍生類別必須實現的函數。然後我發現在C#中,使用abstract(純虛函數)和Interface(介面)都可以實現這個概念,於是甚感迷惑,請教了一下同事,終於弄懂了設計上的不同概念。

 

如果光從實現上來說,在C#中純虛函數和介面實現的功能一樣 —— 定義抽象介面,衍生類別必須實現。

 

不同的概念是,介面是定義一組方法,它比純虛函數更加抽象,是對於行為的抽象。

即使沒有關係的對象也可能具有同樣的行為特性,那麼將行為抽象到“介面”這個概念中,在設計上將大大增加靈活性。

 

如果拘泥於使用基類的純虛函數,則會增加設計的複雜性,而且使用起來也不靈活。

那麼什麼情況下使用純虛函數呢?

自己總結如下:

1. 確定該行為只被自己的衍生類別使用,不會其他地方有複用的必要。

2. 不構成“一組”行為,沒必要單獨抽出去,增加系統的複雜度。

 

所以在設計中如果發現有“一組”純虛函數,還是單獨抽出去構成介面比較好。

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.