我正在尝试模拟涉及人员和座位的基本场景.人具有身份属性:坐着或站立.一个席位有一个Seated属性,用于指定当前位于其中的Person.此外,座位特别之处在于它只"接受"某些人坐在其中.我知道座位"接受"某人听起来很奇怪,但只是想象它更喜欢某些人而不是其他人.
在" 告诉,不要问 "之后,我应该如何设计Person和Seat对象,以便只有当Seat"接受"他并且他的状态改为Sitting时,Person才能坐在座位上.我的第一个想法是一个Person应该有一个SitDown方法如下:
Person.SitDown(Seat seat);
但这似乎需要Person类在坐在其中之前检查Seat的状态,以及必须更新Seat的Seated属性(而不是更新属性本身的Seat):
// inside the Person class void SitDown(Seat seat) { if (seat.AcceptsPlayer(this)) { seat.Seated = this; this.Status = Sitting; } }
让Seat类处理一个人似乎更好:
Seat.SeatPerson(Person person); // inside Seat class void SeatPerson(Person person) { if (IsAccepted(person)) { this.Seated = person; person.Status = Sitting; } }
但这仍然要求座位改变此人的身份.这是该人的状态应该更新的方式吗?只有一个人能够改变他的身份吗?你会如何模拟这个简单的场景?