加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 21:13:37 所属栏目:大数据 来源:网络整理
导读:我想保持这一短.我建立一个有两个房间的房子,比如BedRoom和StudyRoom,都是从一个叫“Room”的基础派生出来的. BedRoom和StudyRoom有一个叫House的父母.此外,房屋内的任何房间都可以通过父母进入任何其他房间.如果BedRoom必须访问StudyRoom的任何属性,它必须
我想保持这一短.我建立一个有两个房间的房子,比如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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读