【问题标题】:Design Pattern for a very long base class非常长的基类的设计模式
【发布时间】:2019-11-03 03:13:18
【问题描述】:

如果我有 8 个长方法将在 4 个子类之间共享(并非所有子类都将使用所有方法),有些将只使用 2 个其他 4 个,等等。

如果我创建一个基类并且 4 个子类中的每一个都从基类继承,那么问题就解决了,但我试图避免使用很长的基类。

我可以尝试根据使用方式将基类划分为更多类,然后使用多重继承,这是另一种解决方案。

还有其他模式可以解决这个问题吗?什么是最优的?

【问题讨论】:

  • 您是否将继承用作“是”(例如“苹果是水果)?如果是,那么您需要继承所有方法。否则继承不一定是正确的解决方案。

标签: c++ inheritance design-patterns multiple-inheritance


【解决方案1】:

从你提出问题的方式来看,你首先需要认真考虑的是你是否需要上课。

初学者经常陷入的一个陷阱是认为一切都必须在课堂上。虽然某些语言确实需要这样做,但在 C++ 中,这是一种选择,但不一定是必需的——甚至可能是一个非常糟糕的主意。

除非类之间存在实际的“is-a”关系(例如,基类表示Dog,派生类表示狗的类型),否则最好不要使用继承。

[在某些情况下,类层次结构是合适的,即使没有“is-a”关系——但是,如果你的情况是这样,你几乎肯定不需要问你有的问题.]

相反,我只需定义八个具有适当参数和返回类型的非成员函数(即不是类的成员)。参数和返回值(如果有的话)既可以用来向函数传递信息,也可以用来传回信息。

四个类然后根据需要调用函数。但是,根据您的描述,甚至不清楚您是否需要这四个类。可能所需要的只是一组通过调用“8 个长方法”来实现的函数。如果您需要阻止其他代码调用它们,则可以将这“8个长方法”本地实现到源文件。

一般来说,旨在使您的设计尽可能简单。如果在没有类层次结构或根本不定义任何类的情况下可以实现这一点,那么就不要使用类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    • 2018-09-01
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多