我有一个系统,需要对“家庭”进行建模,每个家庭都有一个“电视订阅”。这可以是数字订阅或模拟订阅。
用户登录机顶盒后,可以租用电影。
因此,当前的方案如下:
//Existing instantiated variables in scope
aMovie
aUser
aSetTopBox
//End
--> execute this command:
aUser rent: aVideo on: aSTB
Code:
User>>rent: aVideo on: aSTB
aVideo rentBy: self on: aSTB
Video>>rentBy: aUser on: aSTB
aUser rentActionMovie: self on: aSTB
User>> rentActionMovie: aMovie on: aSTB
aSTB rentActionMovie: aMovie by: self
STB>>rentActionMovie: aMovie by: aUser
(loggedInUser isNil)
ifTrue: [ loggedInUser := aUser.
--Do stuff to charge the movie]
ifFalse: [ -- Show error that user is not logged in]
从技术角度来看,这是正确的。但我有以下问题(很抱歉我比较挑剔):
我必须将 aSTB
两个方法调用传递下去才能使用它。这里需要双重分派,因为我有 Child
和 Adult
,他们可以租用 AdultMovie
和 ChildrensMovie
��因此,我使用双重分派而不是类型检查(要求)。因此,我想到了以下解决方案:
我可以��� aSTB
上存储 currentlyLoggedIn
并在 aSTB
上存储 loggedInOn
。然而,这会使对象相互引用。
我的直觉告诉我这是一个不好的迹象。虽然我不知道如何解决它。
理想情况下,我想做类似于这样的事情:
aUser rent: aMovie.