Я пытаюсь смоделировать базовый сценарий с участием Person and Seat. У человека есть свойство Status: Sitting or Standing. Сиденье имеет свойство Сидит, которое указывает Человека, который в данный момент сидит в нем. Кроме того, Seat специальный тем, что он только «принимает» определенных людей, чтобы сесть в него. Я знаю, что это звучит странно для Сита, чтобы «принять» кого-то, но просто представьте, что он предпочитает определенных людей над другими.Простой сценарий, как включить Tell Tell Не спрашивайте?
После того, как «Tell, Don't Ask» «Как создать объекты Person and Seat, чтобы человек мог сесть в сиденье, только когда сиденье« примет »его, а также изменит его статус на« Сидит ». Моя первая мысль была о том, что человек должен иметь метод SitDown следующим образом:
Person.SitDown(Seat seat);
Но это, кажется, что это потребовало бы класс Person, чтобы проверить состояние сиденья, прежде чем сесть в него, а также необходимости обновления Сидящая собственность сИДЕНЬЯ (вместо сиденья обновление само имущество):
// inside the Person class
void SitDown(Seat seat) {
if (seat.AcceptsPlayer(this)) {
seat.Seated = this;
this.Status = Sitting;
}
}
кажется, лучше иметь класс сиденья ручку сидения человека:
Seat.SeatPerson(Person person);
// inside Seat class
void SeatPerson(Person person) {
if (IsAccepted(person)) {
this.Seated = person;
person.Status = Sitting;
}
}
Но это все еще требует, чтобы Сидение изменило статус человека. Это так, что статус человека должен быть обновлен? Должен ли только человек изменять свой статус? Как бы вы моделировали этот простой сценарий?
Можете ли вы привести пример кода? Я с трудом понимаю, как меняется состояние человека с позиции «Постоянное на сидение» с использованием модели «Сидения», как вы указали. – snazzer
Вместо того, чтобы иметь флаг статуса в качестве переменной-члена, у Человека должен быть метод IsSeated(), который проверяет модель размещения. Аналогично, у Seat будет метод IsOccupied(). –