Я пытаюсь смоделировать базовый сценарий, включающий человека и место. Человек имеет свойство Status: сидя или стоя. Место имеет свойство Seated, в котором указывается лицо, которое в данный момент находится в нем. Кроме того, место является особенным в том смысле, что оно «принимает» только определенных людей. Я знаю, что для Seat звучит странно «принимать» кого-то, но просто представьте, что он предпочитает некоторых людей другим.
После " Скажите, не спрашивайте ", как мне сконструировать объекты "Человек" и "Сиденье", чтобы Человек мог сесть в Сиденье только тогда, когда Сиденье "принимает" его, а также иметь его статус изменился на Сидя. Моей первой мыслью было, что у человека должен быть метод SitDown следующим образом:
Person.SitDown(Seat seat);
Но, похоже, для этого необходимо, чтобы класс Person проверял состояние Seat перед тем, как сидеть в нем, а также обновлял свойство Seat Seat (вместо того, чтобы 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;
}
}
Но для этого все же требуется место, чтобы изменить статус человека. Это способ обновления статуса человека? Должен ли только человек иметь возможность изменить свой статус? Как бы вы смоделировали этот простой сценарий?