两个伴随的类层次结构 - 一个好的设计模式?

时间:2012-12-14 17:24:28

标签: c++

以下是C ++中的良好设计模式吗?

    Pet               PetOwner
     |                   |
 ---------         --------------
 |       |         |            |
Cat     Dog     CatOwner     DogOwner

换句话说,两个附带的类层次结构。你有没有看到这件事,这被认为是一种好习惯吗?

让我进一步澄清。这种设计肯定遵循“开放 - 封闭”原则。它是“开放的”,因为新东西可以轻松添加(新的HorseHorseOwner子类),并且它是“封闭的”,因为可以在不修改现有代码的情况下添加新内容

这两个附带层次结构的目的是,例如,PetOwner具有feed()虚函数,Pet具有make_hungry_sound()虚函数。此外,Cat由特定的CatOwner构建。

是否有更好的设计模式可以取代像这样的两个相关层次结构?我问的原因是我想知道在扩展内容时要求人们同时添加两个类是否是一种好习惯。似乎有点可疑......

3 个答案:

答案 0 :(得分:2)

似乎是一个非常主观的问题。答案可以很多(如果您在问题中添加更多信息,则会更多),因此我只会根据问题中的可用内容发表评论:

假设PetOwner还有更多事情要做,而不仅仅是feed(),是的,它有理由拥有它。例如。你不会养宠物,你不会把每只宠物都放在选美比赛中。 如果所有PetOwner必须做的都是feed,那么只需要一个具体的类就足够了。

答案 1 :(得分:0)

为了表达我的意见,不,宠物的设计在那里,但宠物主人没有理由具体,最终会变得模棱两可/过于复杂。创建一个可以容纳所有类型宠物的宠物主人,然后创建与所有宠物相关的功能将是一个更好的设计。

//in class petOwner
pet *animal;

//user wants a dog...
animal = new dog; //you now have a dog

答案 2 :(得分:0)

你应该只有PetOwner和双重调度以宠物及其子类为食。宠物知道他要吃什么。实施以宠物为食。