Паттерн Enabler на самом деле является лишь вариацией паттерна Observer. Вы устанавливаете наблюдателей на интересные части системы, создавая Условия. Затем активаторы могут соблюдать условия и включать / отключать виджеты.
например. когда вы загружаете окно, вы создаете условия, которые отслеживают такие вещи, как, например, выбрано ли в списке или в поле со списком (или в модели под списком или в поле со списком). Вы можете назвать это чем-то вроде «thingSelectedCondition ». Затем вы подключаете активаторы к виджетам, которые привязаны к одному или нескольким условиям (которые вы можете и / или вместе ... хотя обычно вы просто хотите, и они вместе на практике).
Я обычно реализую их, имея фабрику виджетов, так что один из передаваемых вами параметров является массивом именованных условий, которые при объединении вместе включают / отключают виджет. Э.Г.
widgetFactory.createButton (String buttonLabel, String methodActionName, String [] conditionNames)
ConditionNames будет искать Условия, доступные в некотором виде HashMap, создавать CompositeCondition (который AND будет содержать все наблюдаемые логические значения условий) и создает Enabler, который прослушивает CompositeCondition и сообщает созданному виджету включить / отключить на основе базового условия.
Звучит немного сложно, но как только вы создаете базовую инфраструктуру, пара строк кода связывают ваши условия, а затем пользовательский интерфейс всегда синхронизируется с условиями.
Не думаю, что я когда-либо официально писал шаблон Enabler, или я просто указал бы вам URL.
HTH,
Ken