Ниже приведен пример подхода к поиску подходящего технического решения (с шаблонами проектирования), а не попытка разработать полное решение для заданных требований.
Высокий обзор подхода заключается в переформулированииТребования, чтобы подчеркнуть технические аспекты.
1-й старт, пропустив детали, такие как There are different types of gate controllers; some that come with gates that open and close automatically...
и обратите внимание на общую точку зрения
- обработать ручку
- (открыть /закрыть) ворота
оба могут рассматриваться как поведение
2-й шаг, постепенно добавлять детали
обработать платеж
- вручную: оператор берет деньги, записывает транзакцию, возвращает изменение
- автоматически: система считывает кредитную карту, списывает сумму, записывает транзакцию
- тикет:система выдает тикет и через некоторое время (когда драйвер достигает существующего) транзакция обрабатывается
обрабатывает ворота
- ручной контроллер ворот: просто ничего не делать, оператор управляет воротами
- автоматический контроллер ворот: по сигналу открыть ворота, по второму сигналу закрыть ворота.Первый сигнал должен исходить от процессора транзакций, второй сигнал может поступать от таймера, датчика движения или датчика препятствия
На втором этапе легко заметить, что может бытьразличные реализации поведения, определенные на 1-м шаге.На 2-м шаге можно заметить некоторые другие поведения
- сигнализировать об открытии
- сигнализировать о закрытии
- с использованием таймера
- с использованием датчика движения
- с помощью датчика препятствий
продолжайте добавлять детали и проверяйте новое поведение, пока все детали не будут исчерпаны
3-й шаг идентифицирует модель(с подробной информацией), участвующей в системе
- Оплата: содержит сумму и дату платежа
- Ворота: содержит состояние ворот (открыт / закрыт) * 1065 *
- Сигнал: Открыть / Закрыть
- ...
4-й шаг идентифицировать действия
- TransactionProcessor: получает детали для платежа и обрабатывает их
- Датчик: генерирует сигналы, такие как сигнал закрытия затвора.
- GateController: обрабатывает сигналы от платежного процессора или от датчика
- ...
5thпошагово сложите модель и действия
- start (запущеныоператором с кассового автомата или терминала кредитной карты или ...)
- построить
Payment
объект - и отправить его на
TransactionProcessor
- и
TransactionProcessor
обрабатывает транзакцию с деталями из объекта Payment
и возвращает детали транзакции (статус ok / nok) - , и если транзакция в порядке, создайте
Signal
, чтобы открыть ворота - и отправить его на
GateController
- , а
GateController
открывает Gate
- и ожидает закрытия
Signal
- и
Sensor
генерирует закрытие Signal
- , а
GateController
закрывает Gate
Обратите внимание, что на 5-м шаге нет подробностей о том, как обрабатываются транзакции, икак генерируются сигналы, так как это детали реализации.На этом шаге абстракции (например, в Java интерфейсы) должны быть уточнены
6-й шаг добавить детали реализации (реализации для абстракций, определенных на 5-м шаге)
- как обрабатывается платеж вручную
- как обрабатывается платеж кредитной картой
- как генерируется сигнал закрытия (на основе датчика или таймера или ...)
- ...
Поскольку поведение
- обрабатывает платеж (стратегия с различными реализациями)
- вручную с помощью контрольно-кассовой машины
- автоматически с помощью кредитной карты
- по билетам
- обрабатывать ворота (стратегия с различными реализациями)
- вручную
- автоматически с датчиком движения
- автоматически с датчиком обструкции
- автоматически с таймаутом
необходимобыть смоделированным проверить список поведенческих шаблонов проектирования .
- Стратегия может быть полезна для реализации вышеуказанного поведения
- Команда может быть полезно для реализации открывающих / закрывающих ворот
Другой полезной конструкторской пантерой (не поведенческой) может быть Наблюдатель для реализации ворот с датчиками (наблюдать за датчиком иобрабатывать гейт)
Такое решение может быть легко расширено при необходимости с помощью новых реализаций для существующего поведения (таких различных способов обработки гейтва или различных способов обработки платежа или новых датчиков, которые будут использоваться), не затрагиваясуществующие