我想把这个短一点。我建了一个有两个房间的房子,比如说
BedRoom
和
StudyRoom
都是从一个名为
Room
.
卧室
和
书房
有一个叫
House
. 而且,房子里的任何房间只能通过父母进入其他房间。如果
卧室
必须访问的任何属性
学习室
,只能通过
房子
(即父母),反之亦然。
HouseA ISA House
HouseA HAS BedRoom and StudyRoom.
BedRoom ISA Room
StudyRoom ISA Room
现在的问题是:假设,我建造了另一个家(假设
HouseB
,与上述完全相同,但有一个变化。我不想要两个分开的房间(即
卧室
和
学习室
,但是一间单人房(
MasterRoom
)有这两个设施。
为了代码的可重用性,我可以考虑以下设计选项:
Option-1:
HouseB ISA House
HouseB HAS MasterRoom
MasterRoom ISA Room
在这里,我失去了重用
卧室
和
学习室
我为之创造的
HouseA
. 注意,大多数属性
卧室
和
学习室
需要重新实施
主人室
总之,这会导致代码重复。
Option-2:
HouseB ISA House
HouseB HAS MasterRoom
MasterRoom ISA Room
MasterRoom HAS LogicalBedroom
MasterRoom HAS LogicalStudyRoom
LogicalBedroom ISA BedRoom
LogicalStudyRoom ISA StudyRoom
这样,我就可以使用组合来重用大部分代码(我有几千行代码可以重用),但问题是
卧室
是混凝土等级
logicalBedRoom
可能会发现某些属性不合适,可能会强制重写方法,以便它们不做任何事情。例如,
Bedroom->noOfSides() = 4
和
logicalBedRoom->noOfSides() = ??
. 这是继承的一个好用途吗?
我的实际设计是一个复杂的芯片,它结合了两个单独的芯片的功能(我使用了house(主板)和room(芯片)类比)。我用面向对象的Perl编写代码,我真的很欣赏任何其他的设计建议。
谢谢