Как перейти к отображению нескольких классов "Меню" в Java - PullRequest
0 голосов
/ 17 марта 2011

Привет всем, я относительно новичок в OOD и Java, поэтому не уверен, как это сделать правильно.

В настоящее время мне нужно создать приложение (на основе консоли / командной строки), которое предполагает прохождение сериитак называемые «меню», в которых приложение будет отображать ваш выбор, а вы вводите 1/2/3/4 и т. д. Мой профессор сказал мне разбить мой граничный класс (класс, в котором все отображения выбора), потому что он слишком длинный(400+ строк).

Теперь приходит проблема.Если бы я разбил его, мне пришлось бы продолжать создавать новые классы объектов для вызова разных меню в разных классах.Например:

Допустим, у меня есть MainMenu, FoodMenu, DrinkMenu.Поэтому мой основной метод создаст объект MainMenu для вызова displayMenu ().Оттуда, если я хочу перейти к меню еды, я должен создать еще один объект FoodMenu и снова вызвать displayMenu ().Далее по кодам, если я хочу вернуться обратно в главное меню, мне снова придется снова создать объект MainMenu и вызвать displayMenu.

В приведенном выше методе было бы так много переменных, ожидающих сбора мусора, и полная потеря памяти.Есть ли другое решение вокруг этого?Заранее большое спасибо.

Хэмлин

Ответы [ 3 ]

1 голос
/ 17 марта 2011

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

Что касается того, как добраться до меню, вы можете просто сохранить один из каждого типа меню в массиве меню или какой-либо другой коллекции (например, Map, если вы хотите иметь возможность просматривать их с помощью строка или другой объект). Сделайте эту коллекцию общедоступной (static в некотором классе public), и тогда вы сможете отображать один и тот же экземпляр меню каждый раз, когда вам это нужно.

0 голосов
/ 17 марта 2011

Как обсуждено в Как использовать действия , класс Action является удобным способом "отделить функциональность и состояние от компонента".Этот пример создает меню последних файлов, используя экземпляры класса RecentFile.Подобный класс для каждого из ваших MainMenu, FoodMenu, DrinkMenu может быть способом инкапсуляции связанных пунктов меню.

0 голосов
/ 17 марта 2011

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

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

...