Где я могу найти более подробную информацию о паттерне Enabler, который популяризировал Кен Ауэр? - PullRequest
5 голосов
/ 08 июля 2009

В своей книге Применение экстремального программирования Кен Ауэр случайно упоминает паттерн Enabler. Кент Бек также упоминает об этом (по крайней мере, в электронном письме от 8 ноября 2004 года), но я не смог найти каких-либо подробностей в обычных местах (Google, вики на c2.com и т. Д.)

Где я могу узнать больше?

1 Ответ

5 голосов
/ 10 августа 2009

Паттерн Enabler на самом деле является лишь вариацией паттерна Observer. Вы устанавливаете наблюдателей на интересные части системы, создавая Условия. Затем активаторы могут соблюдать условия и включать / отключать виджеты.

например. когда вы загружаете окно, вы создаете условия, которые отслеживают такие вещи, как, например, выбрано ли в списке или в поле со списком (или в модели под списком или в поле со списком). Вы можете назвать это чем-то вроде «thingSelectedCondition ». Затем вы подключаете активаторы к виджетам, которые привязаны к одному или нескольким условиям (которые вы можете и / или вместе ... хотя обычно вы просто хотите, и они вместе на практике).

Я обычно реализую их, имея фабрику виджетов, так что один из передаваемых вами параметров является массивом именованных условий, которые при объединении вместе включают / отключают виджет. Э.Г.

widgetFactory.createButton (String buttonLabel, String methodActionName, String [] conditionNames)

ConditionNames будет искать Условия, доступные в некотором виде HashMap, создавать CompositeCondition (который AND будет содержать все наблюдаемые логические значения условий) и создает Enabler, который прослушивает CompositeCondition и сообщает созданному виджету включить / отключить на основе базового условия.

Звучит немного сложно, но как только вы создаете базовую инфраструктуру, пара строк кода связывают ваши условия, а затем пользовательский интерфейс всегда синхронизируется с условиями.

Не думаю, что я когда-либо официально писал шаблон Enabler, или я просто указал бы вам URL.

HTH,

Ken

...