我正在尝试模拟涉及人员和座位的基本场景.人具有身份属性:坐着或站立.一个席位有一个Seated属性,用于指定当前位于其中的Person.此外,座位特别之处在于它只"接受"某些人坐在其中.我知道座位"接受"某人听起来很奇怪,但只是想象它更喜欢某些人而不是其他人.
在" 告诉,不要问 "之后,我应该如何设计Person和Seat对象,以便只有当Seat"接受"他并且他的状态改为Sitting时,Person才能坐在座位上.我的第一个想法是一个Person应该有一个SitDown方法如下:
Person.SitDown(Seat seat);
Run Code Online (Sandbox Code Playgroud)
但这似乎需要Person类在坐在其中之前检查Seat的状态,以及必须更新Seat的Seated属性(而不是更新属性本身的Seat):
// inside the Person class
void SitDown(Seat seat) {
if (seat.AcceptsPlayer(this)) {
seat.Seated = this;
this.Status = Sitting;
}
}
Run Code Online (Sandbox Code Playgroud)
让Seat类处理一个人似乎更好:
Seat.SeatPerson(Person person);
// inside Seat class
void SeatPerson(Person person) {
if (IsAccepted(person)) {
this.Seated = person;
person.Status = Sitting;
}
}
Run Code Online (Sandbox Code Playgroud)
但这仍然要求座位改变此人的身份.这是该人的状态应该更新的方式吗?只有一个人能够改变他的身份吗?你会如何模拟这个简单的场景?
小智 4
引入第三个模型……既涉及座位又涉及人员的座位。然后,您可以在每次有人坐下时创建该模型的实例,添加一些验证以防止两个人坐在同一个座位上,甚至可能添加一些超时(如果您坐在座位上的时间太长,您就会失去它) 。
归档时间: |
|
查看次数: |
1417 次 |
最近记录: |