我想保持这一短.我建立一个有两个房间的房子,比如BedRoom和StudyRoom,都是从一个叫“Room”的基础派生出来的.
BedRoom和StudyRoom有一个叫House的父母.此外,房屋内的任何房间都可以通过父母进入任何其他房间.如果BedRoom必须访问StudyRoom的任何属性,它必须只通过House(即父)来进行,反之亦然.
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
在这里,我无法重新使用我为HouseA创建的BedRoom和StudyRoom的属性.请注意,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()= ??.这是继承的好用吗?
我的实际设计是一个复合的芯片,结合了两个单独的芯片的功能(我使用House(主板)和Room(芯片)类比).我在面向对象Perl中的代码,我真的很感激任何替代的设计建议.
谢谢