在我们的项目 - 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