2

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

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

换句话说,两个伴随的类层次结构。你见过这样做吗,这是否被认为是一种好的做法?

让我进一步澄清。这种设计当然遵循“开闭”的原则。在可以轻松添加新事物(新的HorseHorseOwner子类)的意义上它是“开放的”,而在无需修改现有代码就可以添加新事物的意义上它是“封闭的”。

这两个附带的层次结构的目的是,例如,PetOwner具有feed()虚拟功能,并且Pet具有make_hungry_sound()虚拟功能。此外,Cat是用特定的CatOwner.

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

4

3 回答 3

2

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

假设PetOwner要做的不仅仅是feed(),是的,拥有它是合理的。例如,您不会饲养每只宠物,也不会让每只宠物都参加选美比赛。如果PetOwner只需要喂食,那么只需要一个具体的类就足够了。

于 2012-12-14T17:34:28.173 回答
0

就我而言,不,宠物的设计已经存在,但宠物主人没有理由具体说明,最终会变得模棱两可/过于复杂。创建一个可以容纳所有类型宠物的宠物主人,然后创建与所有宠物相关的功能将是一个更好的设计。

//in class petOwner
pet *animal;

//user wants a dog...
animal = new dog; //you now have a dog
于 2012-12-14T17:30:25.850 回答
0

您应该只拥有一个 PetOwner 并以 pet 及其子类为食的双重调度。宠物知道他必须吃什么。实施以宠物为食。

于 2012-12-14T17:33:43.093 回答