两个附带的类层次结构-一个好的设计模式
Two accompanying class hierarchies - a good design pattern?
以下是C++中一个好的设计模式吗?
Pet PetOwner
| |
--------- --------------
| | | |
Cat Dog CatOwner DogOwner
换句话说,两个伴随的类层次结构。你见过这种做法吗?这被认为是一种好的做法吗?
让我进一步澄清。这种设计当然遵循了"打开-关闭"的原则。它是"开放的",可以很容易地添加新事物(新的Horse
和HorseOwner
子类),它是"封闭的",不需要修改现有代码就可以添加新事物。
这两个附带层次结构的目的是,例如,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并对宠物及其子类进行双重调度。宠物知道自己必须吃什么。对宠物实施喂食。
相关文章:
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- 资源管理设计模式
- 用于在回调中调用解析器的设计模式
- 设计帮助 - 为不同类型的消息处理通用接口的设计模式
- 在这种情况下我应该使用哪种设计模式
- C++中物体改变识别的设计模式?
- 确保所有构造函数调用相同的函数 c++ 设计模式
- 需要实例化不同类/对象并在启动时确定的硬件插槽的设计模式
- 设计模式,以避免不必要地添加抽象函数以适应新功能
- 工厂设计模式优化
- 使用C++模板的数据映射器设计模式
- 具有多个继承共享一个资源的对象 - 寻找良好的设计模式
- 对于存储另一个类所需信息的类,例如其构造,是否有设计模式?
- 两个附带的类层次结构-一个好的设计模式
- 这是一个设计模式吗?从setters返回
- 设计模式-是否有一个有效的案例可以创建一个立即被销毁且不直接在C++中使用的临时模式
- C++设计模式,用于在另一个类中使用抽象类对象
- 如何将不同的数据结构集成为一个?任何设计模式或经验
- 设计模式-有人能给我一个c++中Singleton的例子吗
- C++策略设计模式,制作一个接口数组