我想保持这个短。 我建有两间HouseA,说BedRoom
和StudyRoom
,无论从基类派生叫Room
。 BedRoom
和StudyRoom
有一个名为相同的父House
。 此外,在家里的任何房间,只能通过父访问任何其他房间。 如果BedRoom
有权访问的任何属性StudyRoom
,它必须只能通过走House
(即父母),反之亦然。
HouseA ISA House
HouseA HAS BedRoom and StudyRoom.
BedRoom ISA Room
StudyRoom ISA Room
(说比方说,我建一个家:现在的问题HouseB
),这是一个完全一样上面,但有一个变化。 我不希望两个单独的房间(即BedRoom
和StudyRoom
),而是一个单间( MasterRoom
),其中有这两个设施。 对于代码的可重用的缘故,我能想到的以下设计方案:
Option-1:
HouseB ISA House
HouseB HAS MasterRoom
MasterRoom ISA Room
在这里,我失去了再利用的属性的能力BedRoom
和StudyRoom
,我为创建HouseA
。 请注意,大多数的属性的BedRoom
和StudyRoom
需要重新实现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() = 4
和logicalBedRoom->noOfSides() = ??
。 这是一个很好的使用继承?
我的实际设计是一个复杂的芯片,它结合了两个独立的芯片(我用家(主板)和室(芯片)的比喻)的功能。 我的目标代码面向Perl和我真的很感激任何替代设计建议。
谢谢