gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 20:28:21 24 4
gpt4 key购买 nike

我想保持这个简短。我 build 了一个有两个房间的 HouseA,比如 BedRoomStudyRoom ,两者都源自名为 Room 的基类.BedRoomStudyRoom有一个名为 House 的父级.此外,房屋中的任何房间都只能通过 parent 访问任何其他房间。如 BedRoom必须访问 StudyRoom 的任何属性,它必须只通过 House (即 parent ),反之亦然。

HouseA ISA House
HouseA HAS BedRoom and StudyRoom.
BedRoom ISA Room
StudyRoom ISA Room

现在的问题:比方说,我 build 了另一个家(比如 HouseB ),它与上面的完全相同,但有一个变化。我不想要两个单独的房间(即 BedRoomStudyRoom ),而是一个拥有这两种设施的单人房间( 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() = 4logicalBedRoom->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 - 我应该使用继承还是组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1598722/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com