2012-04-16 18 views
5

Mam aplikację GUI z wieloma kontrolkami. Większość z nich ma zdarzenia i kontrole są logicznie podłączone do każdego z nich. Na przykład mam 5 pakietów comboBox. Jeśli wybierz coś w cb1 i cb3 je cb2 musi zmienić listę dostępnych wartości. Jeśli coś wybiorę w cb2 i ch4, ich cb5 musi załadować swoją listę dostępnych wartości. Wszystkie artykuły znalezione w sieci mówią, że w tym przypadku powinienem użyć wzorca mediatora wzorzec. Ale we wszystkich tych artykułach mediator - jest czymś w rodzaju klasy boga, która wie wszystko o wszystkich kontrolach i decyduje, co należy zrobić w przypadku jakiegoś zdarzenia. Jeśli mam 5-6 kontrolek - wszystko jest w porządku. Ale co, jeśli mam coś w rodzaju 20 lub 40 kontrolek? Przypuszczam, że klasa mediatorów stanie się potworem w tym przypadku. Ciężko będzie coś z tym zrobić (zmodyfikować lub dodać nową funkcjonalność).Który wzór wzoru do użycia (potrzebuję czegoś w rodzaju wzorca mediatora)?

Czy istnieją inne wzorce lub dobre przykłady mediatora pathern, które pomogą rozwiązać tę sytuację?

PS: Przepraszamy, jeśli istnieją już pytania na ten temat - jest tak wiele pytań o tej samej nazwie, że nie jest tak łatwo znaleźć coś, czego naprawdę potrzebuję od wszystkich tych tematów.

+2

Rzeczywiście, 20-40 kontroli może prowadzić do bardzo złożonego Pośrednika, jednak Mediator ma wyraźną odpowiedzialność, która jest łatwiejsza do zrozumienia niż rozkładanie logiki na wiele klas. * Czerwona flaga * w pytaniu nie jest ryzykiem klasy boskiej dzięki 20-40 kontrolkom, ale raczej projektowi GUI, który pozwala na 20-40 kontrolek w pierwszej kolejności – Fuhrmanator

+0

** Fuhrmanator **, mam sytuację z dużą formą do pracy z niektórymi biznesami dokumenty (faktury, umowy i tak dalej). Jest więc wiele pól, z którymi użytkownicy muszą pracować. Dla użytkowników wygodniej jest pracować z jednym ekranem informacji. Tak więc, jeśli spróbuję powiedzieć coś w stylu "ok, na razie będziesz miał 3 \ 5 formularzy \ ekrany \ okna. Wypełnij te informacje w pierwszej, a informacje w drugiej". użytkownicy znajdą inną firmę deweloperską, zamiast zmienić nawyki. I, tak czy inaczej, ten temat jest dla innego tematu, chyba :) –

Odpowiedz

2

Mediator jest rzeczywiście właściwym wyborem, jednak istnieje alternatywna opcja używania wzoru OBSERVER, który pozwoli zachować logikę oddzielnie. (cb2 obserwuje cb1 i reaguje odpowiednio, cb3-> cb2 itd.).

Dzięki wzorowi OBSERVER będziesz musiał łączyć tylko 2 kontrolki naraz, to jest jak łańcuch.

0

Mediator pattern - Wiki

Jeśli z wikipedii ale to proste i sprawia, że ​​jest łatwy do zrozumienia.

Kiedy uczyłem się wzorców, ten kod był najlepszy. Proste a zarazem skuteczny przez ... I tak za to, co opisujesz chciałbym wykorzystać wzorzec mediatora

0

użyć różnych działań, jak i strategii Strategy Pattern wywołać pewną strategię z Pośrednika, tak, że będzie tylko trzeba zmienić kilka linii kodu, jeśli chcesz dodać więcej sterowników jutro.

1

Spróbuj zgrupować komponenty, które należą do siebie w niestandardowych komponentach (rozszerzenie JComponent lub JPanel). Te niestandardowe komponenty nasłuchują zdarzeń swoich dzieci i aktualizują inne dzieci w razie potrzeby (-> stają się Mediatorami). Niestandardowe komponenty mogą również uruchamiać własne niestandardowe zdarzenia, a tym samym informować swojego rodzica Mediatora.

0

GOF książka mówi.

"... Podobne Wzory

elewacyjne (185) różni się od mediatora w tym, że abstrahuje podsystem obiektów w celu zapewnienia bardziej wygodny interfejs Jego protokół jest jednokierunkowa, to to, obiekty elewacyjne zgłaszają żądania klas podsystemów, ale nie odwrotnie.W przeciwieństwie do tego, Mediator umożliwia wspólne zachowanie, którego obiekty koleżeńskie nie oferują lub nie mogą zapewnić, a protokół jest wielokierunkowy.

Koledzy mogą komunikować się z mediatorem za pomocą wzorca Obserwatora (293). ...”.

Podejrzewam, że połączenie obu obserwatora i mediatora lub elewacji będzie działać dobrze.

pamiętać, że jedną z cech wzorców projektowych jest to, że za każdym razem, gdy wdrożenie jednego są one różne.

Powiązane problemy