perl – 我应该用继承还是组合?

前端之家收集整理的这篇文章主要介绍了perl – 我应该用继承还是组合?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想保持这一短.我建立一个有两个房间的房子,比如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

在这里,我无法重新使用我为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中的代码,我真的很感激任何替代的设计建议.

谢谢

解决方法

为什么不使用角色来实现这一点:
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

获得roles最简单的方法是使用Moose.

猜你在找的Perl相关文章