2014-11-03 38 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. 如果您打算将基类虚函数定义与派生类函数定义一起使用,那么普通基类将非常有用。正常的基类对于小的继承级别会有好处。