2011-05-15 2 views
3

저는 몇 개의 JPanels를 GUI로 구성했습니다. JPanels의 인스턴스 생성을 위해 팩토리 메서드를 사용하려고합니다. 다음은 UML 다이어그램 내가하고 싶은 것을 보여주는 : enter image description here이 좋은 디자인인가요? 순수 추상 클래스를 사용하여 팩토리 메서드 사용 촉진

은 간단히 말해, 공장 방법은 JPanelSimulatorSubscriber에서 방법을 사용해야하지만 createPanel() 방법은 JPanel을 반환하는 경우, SimulatorFactory 실 거예요 호출 할 수 setSimulator(Simulator) 방법. Conversly, SimulatorSubscriber을 반환하면 패널을 GUI에 추가 할 수 없습니다.

내 첫번째 생각은 캐스트를 사용하는 것이었다 ........ 난 ..

이 두 번째로, 내가 그림에 그린 것을 할 생각 정교 할 필요가 없습니다.

이 방법이 좋고 일반적인 방법이며 대안이 있습니까? 어쩌면 내 공장 방법의 사용도 꺼져 있습니다.

답변

1

모델과보기를 명확하게 구분할 것입니다.

그래서 공장에서는 SimulatorDisplay와 같은 시뮬레이터와 UI 요소와 같은 "비즈니스/모델 요소"를 동시에 만들 수 없습니다. 그래서 나는 두 개의 공장을 사용할 것입니다. 하나는 비즈니스 요소 용이고 다른 하나는 UI 요소 용입니다.

나는 가능한 모든 문제를 해결하기 위해 상속을 사용하지 않을 것입니다. 따라서 더 이상 SimulatorDisplay를 JPanel에서 상속하지 않습니다. SimulatorDisplay에서 JPanel 필드를 사용하고 내부에 getPanel() 메소드가있는 'HasPanel'인터페이스를 생성합니다.

나는 완전한 시뮬레이터를 가입자에게 직접 제공하지 않지만, 시뮬레이터 자체 대신 시뮬레이터의 공개 상태만을 제공하는 실제 리스너 메커니즘을 사용한다.

일반적으로 Java에서 Abstracts 클래스 및 상속을 남용하지 마십시오 (인터페이스에서 exept 일 수도 있음). 당신은 정말로 제한되어 있습니다 자바는 다중 상속을 지원하지 않습니다. 그러나 대부분의 경우에도 이것이 유용하지는 않습니다.

+0

매우 도움이됩니다. 모델과 GUI 구성 요소를 어떻게 병합했는지 봅니다. 이것들을 분리하면 훨씬 더 깔끔하게 정리되고 많은 문제가 해결됩니다. 그리고 네, getPanel()과 같은 것을 가질 수있을 때 JPanel에서 상속 할 필요가 거의 없습니다. 고마워. – Kevin

0

너무 복잡해 보입니다. 나는 이것이 꽤 멀리 있다고 생각하지만 그것은 단지 나의 의견이다.

여기에서 해결하려는 문제에 대한 간결한 설명을 작성할 수 있다면 일반적인 ""공장을 사용하여 JPanels 설치 "를 넘어선 무엇인가를 도울 수 있습니다. 저는 공장이 무엇인지 알았고, 스윙 UI가 무엇인지 압니다. 그러나 당신이 어려움을 겪고 있었기 때문에 디자인 패턴이 필요하다고 생각하게 되었습니까? 아니면 그걸 위해서 주사 했니?