在我們的項目 - C++中,我們有一個名爲「ContentCache」的通用模塊。從這個內容緩存中,我們派生出了客戶特定的內容緩存 - 例如Airtel,TataSky。例如,基礎contentCache具有該方法 - 創建數據庫表,存儲基本信息。與airtel內容緩存具有關係的其他類型的contentcache是一種contentcache。這個airtel內容緩存是自定義的 - 覆蓋一些方法。然而,其餘的都是一樣的。在少數產品上,我們只需使用generic - contentCache。我的問題是我們需要一個抽象類 - ContentCache - IcontentCache。另外,什麼是好方法 - 創建一個抽象類或只創建一個通用基類。我們用IContentCache(即抽象類)獲得了什麼優勢。我正在從設計模式的角度尋找答案。另外,編程的觀點。在CPP中創建抽象類而不是基類會帶來什麼好處?
0
A
回答
2
通常,如果您定義某些只有在需要某些其他不可用信息(或功能)時才能使用的功能,則通常使用抽象類來工作。不可用但需要的信息被定義爲類的抽象方法,然後派生類提供額外的信息(或功能)。
在你的例子中,如果你可以有用地擁有一個通用的ContentCache
那麼它不需要是抽象的。但是你可能有一個設計,在不知道特定客戶的名字的情況下,ContentCache
不能被實例化。在這種情況下,您可以定義抽象基類中的所有緩存功能,並提供一個提供客戶名稱的抽象方法。然後在派生類中提供實現,該實現返回該客戶名稱,然後該類具有創建緩存所需的所有內容。
無可否認,這不是一個很好的例子,因爲您可以在類的構造函數中提供客戶名稱,但是您在派生類中提到了'重寫了幾個方法'。如果這些方法提供的功能在不知道客戶的情況下無法確定,那麼這些方法可能會被抽象化。
0
抽象類不僅僅是一個普通的基類。從設計的角度來看,當我們設計一個基類時,我們知道將會有繼承(虛函數)。所以我們試圖收集基類中的常用函數,這些函數通常會在派生類中被覆蓋。抽象意味着隱藏來自外部世界的實際實現。我們的實現是我們的財富。所以基類只需要作爲接口類的東西,它不應該有任何實現。
當您的派生類將總是使用派生類函數定義rathar而不是使用基類定義時,抽象類對您有好處。
如果您打算將基類虛函數定義與派生類函數定義一起使用,那麼普通基類將非常有用。正常的基類對於小的繼承級別會有好處。
相關問題
- 1. 使用分部類而不是抽象類有什麼好處?
- 2. 使用cURL而不是Fiddler會帶來什麼好處?
- 3. 基於抽象類型創建類
- 4. 創建一個抽象基類來處理不同類型的枚舉
- 5. 爲什麼我們需要抽象類而不是虛擬類?
- 6. 什麼是抽象類型?
- 7. 什麼是在PHP中的抽象類?
- 8. 創建抽象類
- 9. 創建抽象類
- 10. 在javascript中創建對象(帶有新的)有什麼好處?
- 11. 爲什麼HttpServletRequestWrapper類不是抽象的
- 12. 爲什麼HttpContext是一個抽象類而不是接口?
- 13. 爲什麼IDisposable是一個接口,而不是抽象類?
- 14. 爲什麼java.sql.Statement是一個接口而不是抽象類?
- 15. Protobuf網創建帶有接口和抽象基類的typemodel
- 16. 如果無法創建抽象類的新對象,抽象類中的非抽象方法有什麼意義?
- 17. 這是爲什麼抽象類在PHP
- 18. 爲什麼任何一種抽象都使用接口而不是抽象類?
- 19. 抽象基類的抽象子類
- 20. 抽象基類有抽象嵌套類
- 21. 在Java中爲抽象類創建構造函數有什麼用處?
- 22. 什麼是子類從C++中的基類繼承而來?
- 23. 爲什麼我們不能在C++中爲抽象類創建對象?
- 24. 爲什麼我們不能在WCF中使用抽象類而不是接口?
- 25. 如何在MagicDraw中創建抽象類
- 26. 無法在codemodel中創建抽象類?
- 27. js創建抽象類
- 28. 創建抽象活動類
- 29. 創建模板抽象類
- 30. 無法創建抽象類?
另一個問題是contentCache是單例。所以,只有一種產品可以被激活。 – user3629119 2014-11-03 11:08:44
hmm ..關於單身繼承,請參閱[這個問題](http://stackoverflow.com/questions/2166430/singleton-inheritance)。雖然我認爲在您的特定實例中,您已經證明您不需要抽象基類,就像您自己使用通用緩存一樣。 – 2014-11-03 11:18:52
不..我的問題是,是否抽象類或不是這樣的情況。另外,如果有什麼優點?我希望我的代碼是可擴展的,儘可能通用。這就是爲什麼我正在尋找一個好的模式。 – user3629119 2014-11-03 12:27:36