我应该使用继承或成分?(Should I use inheritance or compositio

2019-08-22 17:04发布

我想保持这个短。 我建有两间HouseA,说BedRoomStudyRoom ,无论从基类派生叫RoomBedRoomStudyRoom有一个名为相同的父House 。 此外,在家里的任何房间,只能通过父访问任何其他房间。 如果BedRoom有权访问的任何属性StudyRoom ,它必须只能通过走House (即父母),反之亦然。

HouseA ISA House
HouseA HAS BedRoom and StudyRoom.
BedRoom ISA Room
StudyRoom ISA Room

(说比方说,我建一个家:现在的问题HouseB ),这是一个完全一样上面,但有一个变化。 我不希望两个单独的房间(即BedRoomStudyRoom ),而是一个单间( MasterRoom ),其中有这两个设施。 对于代码的可重用的缘故,我能想到的以下设计方案:

Option-1:
HouseB ISA House
HouseB HAS MasterRoom
MasterRoom ISA Room

在这里,我失去了再利用的属性的能力BedRoomStudyRoom ,我为创建HouseA 。 请注意,大多数的属性的BedRoomStudyRoom需要重新实现MasterRoom无论如何,从而导致代码重复。

Option-2:
HouseB ISA House
HouseB HAS MasterRoom
MasterRoom ISA Room
MasterRoom HAS LogicalBedroom
MasterRoom HAS LogicalStudyRoom
LogicalBedroom ISA BedRoom
LogicalStudyRoom ISA StudyRoom

这样一来,我用的组合物,这样我可以重用我的大部分代码(我有几千行代码,我可以重复使用),但问题是, BedRoom是一个具体的类和logicalBedRoom可能会发现某些属性不适合,可能是不得不让他们无可奈何重写方法。 例如, Bedroom->noOfSides() = 4logicalBedRoom->noOfSides() = ?? 。 这是一个很好的使用继承?

我的实际设计是一个复杂的芯片,它结合了两个独立的芯片(我用家(主板)和室(芯片)的比喻)的功能。 我的目标代码面向Perl和我真的很感激任何替代设计建议。

谢谢

Answer 1:

为什么不使用角色来实现这一目标:

House A has a Bedroom
Bedroom does SleepingArea
House has a Studyroom
Studyroom does ComfyArea

House B has a MasterRoom
MasterRoom does SleepingArea and ComfyArea

获得最简单的方法角色是使用驼鹿 。



文章来源: Should I use inheritance or composition?