比方說,我想實現三個不同的類別:廣場,ColoredSquare,TexturedSquare。繼承深度,單責任或幹
由於ColoredSquare是廣場有彩色和TexturedSquare是ColoredSquare有質感,我首先想到的是讓他們從對方獲得:
class Square {
Square::Square(position)
: position_(position)
{
}
}
class ColoredSquare : public Square {
ColoredSquare::ColoredSquare(position, color)
: Square(position), color_(color)
{
}
}
class TexturedSquare: public ColoredSquare {
TexturedSquare::TexturedSquare(position, color, texture)
: ColoredSquare(position, color), texture_(texture)
{
}
};
然而,我記得讀過,有太多的繼承深度是不好的做法(一般來說,類只能從抽象類派生)。 因此,我認爲有關切換到一個類:現在
class Square {
Square::Square(glm::vec3 position)
: position_(position), type_(SquareType::Basic)
{
}
Square::Square(glm::vec3 position, glm::vec4 color)
: position_(position), color_(color), type_(SquareType::Colored)
{
}
Square::Square(glm::vec3 position, glm::vec4 color, glm::vec2 texture)
: position_(position), color_(color), texture_(texture), type_(SquareType::Textured)
{
}
};
,而我還能接受,現在,我想它可能在未來不切實際的(我將不能夠使用多態)我也想知道這是否違反了單一責任原則。
以乾淨,廣泛的方式實現這個層次結構的最佳方式是什麼?
我不覺得2級繼承是「太多」的任何手段。如果基類本身是一個有意義的對象,它不一定是抽象的imo。 – Unimportant
會不會有ColouredTexturedSquare? –
@Aer,我想你的第一個代碼塊並沒有說明你的意思 - 不是第三類定義(1)的意思是「TexturedSquare」而不是「ColoredSquare」,(2)意味着'ColoredSquare'而不是'Square'作爲基類? –