两个附带的类层次结构-一个好的设计模式

Two accompanying class hierarchies - a good design pattern?

本文关键字:一个 设计模式 两个 层次结构      更新时间:2023-10-16

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

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

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

让我进一步澄清。这种设计当然遵循了"打开-关闭"的原则。它是"开放的",可以很容易地添加新事物(新的HorseHorseOwner子类),它是"封闭的",不需要修改现有代码就可以添加新事物。

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

有没有更好的设计模式可以取代像这样的两个相关层次结构?我之所以这么问,是因为我想知道在扩展东西时,要求人们同时添加两个类是否被认为是一种好的做法。看起来有点可疑。。。

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

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

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

//in class petOwner
pet *animal;
//user wants a dog...
animal = new dog; //you now have a dog

您应该只拥有一个PetOwner并对宠物及其子类进行双重调度。宠物知道自己必须吃什么。对宠物实施喂食。