Дисплей может настраивать свое собственное меню, но только если действие может быть заключено в команду, связанную с элементом меню. Как только вы настроите его таким образом, вы сможете добавлять и удалять элементы из меню, и им не понадобится доступ к закрытым методам, поскольку у них будет доступ к команде, которая отвечает за действие.
Я думаю, что шаблон команды ваш друг здесь.
Когда у вас есть объекты команд, вы можете использовать их для создания пунктов меню и предоставления методов для выполнения реальных команд.
Если вы просто добавляете список User
объектов, передача объектов команды может иметь больше смысла. Если вы передаете объект, представляющий коллекцию пользователей, возможно, имеет смысл добавить метод для представления объектов команд. Если это так, то вы, вероятно, должны заставить свои объекты реализовывать интерфейс для предоставления доступа к объектам команд, что-то вроде:
public ICommandProvider
{
ICollection<ICommand> GetCommands();
}
тогда команда может быть:
public ICommand
{
String GetMenuText();
void Execute();
}
Наличие отображаемого объекта, отвечающего за возврат команд, позволяет легко иметь в командах ссылку на отображаемую вещь, чтобы они могли ее изменять (например, добавлять элементы или удалять элементы).
Очевидно, что точные детали будут зависеть от вашей ситуации, но что-то подобное должно позволить вам настроить параметры меню вашего дисплея без необходимости знать детали того, что делается. Возможно, вам потребуется обновить дисплей после команды.