2011-03-17 1 views
0

안녕하세요. 저는 OOD와 Java에 비교적 익숙합니다. 따라서 이것을 올바르게 수행하는 방법을 잘 모릅니다.Java에서 여러 개의 "Menu"클래스를 표시하는 방법

현재 응용 프로그램에서 선택 사항을 표시하고 1/2/3/4 등을 입력하는 일련의 소위 "메뉴"를 거치는 응용 프로그램 (콘솔/명령 프롬프트 기반)을 만들어야합니다. 교수님은 너무 길기 때문에 (400+ 회선) 내 경계 클래스 (모든 선택 디스플레이가있는 클래스)를 해체하라고했습니다.

이제 문제가 발생합니다. 만약 내가 그것을 해산했다면, 나는 다른 클래스의 다른 메뉴를 호출하기 위해 새로운 객체 클래스를 만들어야 할 것이다. 예를 들면 다음과 같습니다.

저는 MainMenu, FoodMenu, DrinkMenu가 있다고 가정 해 봅시다. 그래서 내 main 메소드는 displayMenu()를 호출하는 MainMenu 객체를 생성 할 것입니다. 여기서 음식 메뉴로 이동하려면 다른 FoodMenu 객체를 만들고 그 아래에 displayMenu()를 다시 호출해야합니다. 더 나아가 코드를 따라 주 메뉴로 되돌아 가려면 다시 MainMenu 객체를 다시 만들고 displayMenu를 호출해야합니다.

위의 방법은 가비지 수집을 위해 너무 많은 변수를 대기하고 총 메모리를 낭비하게됩니다. 이 문제를 해결할 다른 해결책이 있습니까? 대단히 감사드립니다.

Hamlyn는

답변

1

는 모든 메뉴 중 하나가 abstract class (괜찮아요)를 확장하거나, 이미 그렇게하지 않을 경우 interface (더 나은)를 구현합니다.

메뉴를 가져 오는 방법은 메뉴 배열이나 다른 컬렉션에 각 유형의 메뉴 중 하나를 저장할 수 있습니다 (예 : Map). 문자열을 사용하여 검색 할 수 있도록하려면 또는 다른 객체). 해당 컬렉션에 전 세계에서 액세스 할 수있게하려면 (public 클래스의 static) 필요하면 매번 동일한 인스턴스를 표시 할 수 있습니다.

+0

+1 ['Action'] (http://download.oracle.com/javase/6/docs/api/javax/swing/Action.html) 인터페이스와 ['AbstractAction'] (http : // 이 개념의 좋은 예는 download.oracle.com/javase/6/docs/api/javax/swing/AbstractAction.html입니다. – trashgod

0

우선 가청 처리 문제는 수천 개의 개체가 떠 다니는 것이 아니라 3 개가 될 때 발생합니다. 그러니 걱정하지 마세요.

그러나 일반적으로 이러한 모든 개체를 다시 만드는 데 필요한 논문에는 결함이 있습니다. 당신은 각각 하나씩 만 필요로하고 서로에 대한 참조에 접근 할 수 있어야합니다. 예를 들어, 각 "displayMenu"메서드는 Menu를 인수로 취할 수 있습니다. displayMenu() 메서드는 "이전 메뉴로 돌아 가기"옵션이 인수로 전달 된 메뉴를 호출하도록 설정합니다.

+0

이전 메뉴를 표시 할 때 무엇을 전달합니까? 처음부터 잘 설계된 것이 아니라면, 메뉴 스택을 튕겨 버리는 것과 관련된 논리 문제가 발생할 수 있습니다. –

0

How to Use Actions에서 논의 된 것처럼, Action 클래스는 "기능과 상태를 구성 요소에서 분리하는"편리한 방법입니다. 이 exampleRecentFile 클래스의 인스턴스를 사용하여 최근 파일 메뉴를 만듭니다. MainMenu, FoodMenu, DrinkMenu 각각에 대한 비슷한 클래스가 관련 메뉴 항목을 캡슐화하는 방법 일 수 있습니다.

+0

안녕하세요. 답장을 보내 주셔서 감사합니다. 그러나 GUI가없고 명령 프롬프트만으로 작업 할 수 있습니다. 여전히 조치가 적용될 수 있습니까? – Hamlyn

+0

죄송합니다. 질문의이 부분을 간과했습니다. 그러나 @Platinum Azure의 답 중 Action (행동)이 그 예가되는 일반적인 개념은 여전히 ​​유효합니다. – trashgod