2010-03-21 5 views
2

저는 시간이 지남에 따라 변경 될 가능성이있는 요소를 분리하여 작성중인 응용 프로그램을 "미래 보장"하려고합니다. 내 응용 프로그램에서는 출력 형식의 변경에 적응할 수 있어야합니다 (예 : 오늘 CSV 파일로 출력합니다. 나중에 SQL Server 데이터베이스 나 웹 서비스 등에 직접 출력해야 할 수도 있음) .런타임에 다른 클래스의 GUI 요소를 어떻게 통합합니까?

저는 각 개별 사례에 대해 하위 클래스로 지정할 추상 클래스 ("OutputProvider")를 정의하여이 문제를 처리하고 있습니다. 이 문제의 한 가지 측면은 각 구체적 클래스에 고유 한 구성 GUI를 제공하는 것입니다. 출력 설정을위한 탭이있는 설정 대화 상자가 있습니다. 이 탭에서 드롭 다운을 사용하여 공급자 및 그 아래의 JPanel을 선택하여 공급자 별 GUI의 내용을 보관합니다. 런타임에 해당 패널에서 올바른 GUI를 얻고 이벤트와 관련하여 올바르게 작동하게하려면 어떻게해야합니까?

새 제공 업체에 대한 지원을 추가하기 위해 새 jar 또는 클래스 파일을 특정 폴더에 놓기 만하면 응용 프로그램이 선택할 수있는 방법이 있다면 보너스가됩니다. 시작시에 그것.

NetBeans 및 스윙을 사용하고 있습니다.

+1

예를 들어 구체적인 CSV 작성기와 함께 작동하는 응용 프로그램을 만드는 것이 좋습니다. 그런 다음 CSV 작성기가 응용 프로그램에 연결되어 다른 인스턴스가 플러그인해야하는 위치를 알 수 있습니다. – msw

답변

1

아드리안의 솔루션이 좋다.

/** 
* returns a JPanel that shows configuration options for this outputprovider, 
* after initializing the JPanel with current output options 
*/ 
public JPanel getConfigurationPanel(); 
/** 
* configures output options using values in configPanel, previously 
* requested through getConfigurationPanel 
*/ 
public void configureFromPanel(JPanel configPanel) throws BadConfigException; 

을 출력 구성 대화 상자의 해당 필드에 반환 된 JPanel을 포함 : 그냥 다음 두 가지 방법을 의무화하기 위해 OutputProvider을 확장합니다. 사용자가 "수락"버튼을 누르면 configureFromPanel()이 호출됩니다.

1

아마도 해당 공급자에 대한 구성 옵션이 포함 된 JPanel을 반환하는 OutputProvider 클래스에 추상 메서드를 사용할 수 있습니다. JPanel을 리턴하는 대신에 더 많은 것을 분리하고 싶다면 메소드는 Class/클래스 이름을 리턴 할 수 있습니다. 그런 다음 인스턴스를 런타임에 만들 수 있습니다.

This question이 질문의 두 번째 부분에 대답 할 수 있습니다.

1

나에게 완벽한 것으로 보입니다. Factory Design Pattern 후보자 예 : 이 같은 전화를 할 것 (의사 코드를 : ')

//get the writer responsible for storing to any media ... 
Writer objWriter = new Writer (configForCsvOrDb) ; 
//perform the actual write according to the type of storage 
objWriter.Write(objToWrite) ; 
1

이것은 strategy pattern의 좋은 사례입니다. getOutputPanel()과 같은 메소드를 사용하여 OutputProviderStrategy을 정의 할 수 있습니다.

관련 문제