Существует ли шаблон проектирования, который может помочь в настройке команд на общем дисплее? - PullRequest
0 голосов
/ 11 апреля 2011

У меня есть экранный объект, который отображает список пользователей и предоставляет меню для действий в этом списке - добавления новых пользователей, добавления их в группы, их удаления и т. Д. Сейчас дисплей настраивает свое собственное меню, поэтому он можетдобавить команду меню, например doCreateNewUsers().К сожалению, это означает, что у каждого экземпляра дисплея всегда есть опция «создать новый».

Я хочу настроить меню по-разному для разных экземпляров дисплея - на вкладке «Пользователи» он должен включать«создать новый» вариант, и на вкладке «Группы», он не должен.Моей первой мыслью было сделать меню внешним, чтобы я мог настроить его по-другому.Проблема в том, что тогда я теряю возможность вызывать приватную функцию doCreateNewUsers()!

Существует ли шаблон проектирования для этой ситуации?Мне не нравится идея сделать doCreateNewUsers публичной, потому что она показывает диалог, который не должен запускаться внешними классами.Я мог бы сделать отображение абстрактным, чтобы я мог определить меню в анонимных подклассах, но этот вид портит способ повторного использования виджетов прямо сейчас - я хотел бы настроить меню после того, как дисплей был создан и инициализирован.Я надеюсь, что есть какой-то отраслевой стандарт решения этой проблемы!

Ответы [ 2 ]

1 голос
/ 12 апреля 2011

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

Я думаю, что шаблон команды ваш друг здесь.

Когда у вас есть объекты команд, вы можете использовать их для создания пунктов меню и предоставления методов для выполнения реальных команд.

Если вы просто добавляете список User объектов, передача объектов команды может иметь больше смысла. Если вы передаете объект, представляющий коллекцию пользователей, возможно, имеет смысл добавить метод для представления объектов команд. Если это так, то вы, вероятно, должны заставить свои объекты реализовывать интерфейс для предоставления доступа к объектам команд, что-то вроде:

public ICommandProvider
{
    ICollection<ICommand> GetCommands();
}

тогда команда может быть:

public ICommand
{
     String GetMenuText();
     void Execute();  
}

Наличие отображаемого объекта, отвечающего за возврат команд, позволяет легко иметь в командах ссылку на отображаемую вещь, чтобы они могли ее изменять (например, добавлять элементы или удалять элементы).
Очевидно, что точные детали будут зависеть от вашей ситуации, но что-то подобное должно позволить вам настроить параметры меню вашего дисплея без необходимости знать детали того, что делается. Возможно, вам потребуется обновить дисплей после команды.

1 голос
/ 11 апреля 2011

Мне кажется, что в этом случае вы могли бы использовать шаблон стратегии .

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