Логика базовых классов
Базовый класс Broker (Брокер) не только является абстрактным брокером, который резервирует объекты, но также содержит общую логику регистрации резервирований и список резервирований. Если реализовать эту логику в абстрактном (базовом) классе, то это сделает его еще более полезным, так как значительно упростит реализацию резервирования в производных классах.
Метод Reserve (Резерв)
Основным методом класса Broker (Брокер) является метод Reserve (Резерв).
ReservationResult *Reserve(Reservation *res) // Резервирование { int unitid = res › Unit!d; DateTime dt = res › Date; // Дата int numDays = res › NumberDays; ReservationResult *result = new ReservationResult; // Проверить, находятся ли даты // в пределах поддерживаемого диапазона int day = dt.DayOfYear -1; if (day + numDays > MaxDay) // если (день + numDays> MaxDay) { result › ReservationId = -1; // результат result › Comment = "Dates out of range"; // результат › Комментарий = "Даты вне диапазона"; return result; // результат } // Проверить, доступны ли комнаты для всех дат for (int i = day; i < day + numDays; i++) { if (numCust[i, unitid] >= units[unitid] › capacity) // вместимость { result › Reservation!d = -1; // результат result › Coiranent = "Room not available"; // результат › Комментарий = "Комната не доступна"; return result; // результат } } // Резервировать комнату для требуемых дат for (int i = day; i < day + numDays; i++) n umCust[i, unitid] += 1; // Добавить резервирование (Add reservation) // к списку резервирования, // возвратить результат AddReservation(res); result › ReservationId = res › ReservationId; // результат result › ReservationCost = // результат units[unitid] › cost * numDays; // стоимость result › Rate = units[unitid] › cost; // результат = стоимость; result › Comment = "OK"; // результата Комментарий = "хорошо"; return result; }
Метод Reserve (Резерв) разработан так, чтобы с его помощью можно было зарезервировать разные типы резервируемых объектов. Таким образом, объект Reservation (Резервирование), который хранится в списке резервируемых объектов, создается в классе, производном от Broker (Брокер), и передается в метод Reserve (Резерв) в качестве параметра. Например, объект HotelBroker резервирует объект HotelReservation и т.д.
Потом создается объект ReservationResult, который и будет возвращен (поля Unitid, Date (Дата) и NumberDays наследуются из базового класса Reservation (Резервирование)).
ReservationResult *Reserve(Reservation *res) // Резервирование { int unitid = res › UnitId; DateTime dt = res › Date; // Дата int numDays = res › NumberDays; ReservationResult *result = new ReservationResult;