Шаблон проектирования для инкапсуляции общей функциональности элементов управления пользовательского интерфейса - PullRequest
5 голосов
/ 07 июня 2010

Я обдумываю некоторые идеи относительно шаблона для использования в следующем сценарии.

У меня есть некоторые сторонние элементы управления, к которым я хочу добавить общие функции. Функциональность добавляется путем обработки нескольких событий и выполнения определенных действий при возникновении событий наряду с добавлением некоторых личных переменных для хранения некоторой информации о состоянии между событиями. Я хочу повторно использовать код и функциональность, поэтому я обычно так и делаю.

Создайте класс для этой функциональности и передайте экземпляр элемента управления, к которому я хочу добавить функциональность в конструкторе.

Затем я могу добавить обработчики событий в элемент управления в экземпляре класса.

Кто-нибудь может подумать об альтернативных шаблонах, которые можно использовать для создания такого рода функциональности многократного использования?

Ответы [ 3 ]

1 голос
/ 07 июня 2010

Вы можете взглянуть на:

  1. Фасадный рисунок
  2. Выкройка декоратора
  3. Схема наблюдателя

Шаблон фасада позволит вам инкапсулировать поведение элемента управления в текущем классе. Шаблон декоратора позволит вам создавать стекируемые элементы управления. Шаблон наблюдателя позволит вам управлять событиями.

0 голосов
/ 08 июня 2010

Наиболее применимым «шаблоном дизайна» является Observer. Функциональность многократного использования, которую вы хотите развить, может быть реализована в виде простых наблюдателей Control, которые подписываются на некоторое подмножество событий Control. К счастью, элементы управления Windows Forms реализуют множество событий, позволяя добавлять функциональные возможности извне класса почти так же легко, как и изнутри, с помощью обычного подкласса.

Например, вы можете добавить поддержку перетаскивания, внедрив наблюдателя, который подписался на DragOver и DragDrop (и, возможно, DragLeave) и выполнил соответствующие действия на основе данных DragDropEvent.

Это отличная техника для рассмотрения, поскольку она позволяет один раз разработать такую ​​функциональность и добавить ее ко многим элементам управления.

0 голосов
/ 07 июня 2010

Я чувствую, что шаблон Observer должен быть полезным. Вот как это можно использовать:

UtilityClass , который принимает элемент управления (как вы уже сказали): сделайте его наблюдателем

Регистрация различных классов служебных программ (и, следовательно, элементов управления) для различных событий , в которых он заинтересован: Наблюдаемый

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...