2014-11-03 41 views
0

在我們的項目 - C++中,我們有一個名爲「ContentCache」的通用模塊。從這個內容緩存中,我們派生出了客戶特定的內容緩存 - 例如Airtel,TataSky。例如,基礎contentCache具有該方法 - 創建數據庫表,存儲基本信息。與airtel內容緩存具有關係的其他類型的contentcache是​​一種contentcache。這個airtel內容緩存是自定義的 - 覆蓋一些方法。然而,其餘的都是一樣的。在少數產品上,我們只需使用generic - contentCache。我的問題是我們需要一個抽象類 - ContentCache - IcontentCache。另外,什麼是好方法 - 創建一個抽象類或只創建一個通用基類。我們用IContentCache(即抽象類)獲得了什麼優勢。我正在從設計模式的角度尋找答案。另外,編程的觀點。在CPP中創建抽象類而不是基類會帶來什麼好處?

回答

2

通常,如果您定義某些只有在需要某些其他不可用信息(或功能)時才能使用的功能,則通常使用抽象類來工作。不可用但需要的信息被定義爲類的抽象方法,然後派生類提供額外的信息(或功能)。

在你的例子中,如果你可以有用地擁有一個通用的ContentCache那麼它不需要是抽象的。但是你可能有一個設計,在不知道特定客戶的名字的情況下,ContentCache不能被實例化。在這種情況下,您可以定義抽象基類中的所有緩存功能,並提供一個提供客戶名稱的抽象方法。然後在派生類中提供實現,該實現返回該客戶名稱,然後該類具有創建緩存所需的所有內容。

無可否認,這不是一個很好的例子,因爲您可以在類的構造函數中提供客戶名稱,但是您在派生類中提到了'重寫了幾個方法'。如果這些方法提供的功能在不知道客戶的情況下無法確定,那麼這些方法可能會被抽象化。

+0

另一個問題是contentCache是​​單例。所以,只有一種產品可以被激活。 – user3629119 2014-11-03 11:08:44

+0

hmm ..關於單身繼承,請參閱[這個問題](http://stackoverflow.com/questions/2166430/singleton-inheritance)。雖然我認爲在您的特定實例中,您已經證明您不需要抽象基類,就像您自己使用通用緩存一樣。 – 2014-11-03 11:18:52

+0

不..我的問題是,是否抽象類或不是這樣的情況。另外,如果有什麼優點?我希望我的代碼是可擴展的,儘可能通用。這就是爲什麼我正在尋找一個好的模式。 – user3629119 2014-11-03 12:27:36

0

抽象類不僅僅是一個普通的基類。從設計的角度來看,當我們設計一個基類時,我們知道將會有繼承(虛函數)。所以我們試圖收集基類中的常用函數,這些函數通常會在派生類中被覆蓋。抽象意味着隱藏來自外部世界的實際實現。我們的實現是我們的財富。所以基類只需要作爲接口類的東西,它不應該有任何實現。

  1. 當您的派生類將總是使用派生類函數定義rathar而不是使用基類定義時,抽象類對您有好處。

  2. 如果您打算將基類虛函數定義與派生類函數定義一起使用,那麼普通基類將非常有用。正常的基類對於小的繼承級別會有好處。