Mam następujący problem: Mam zestaw silników, które automatycznie (nasłuchiwanie zdarzeń) kontrolują mój model. Poniższy rysunek przedstawia w ogólnym schemacie Klasa: Identyfikacja implementacji klasy bazowej w tablicy
Teraz mam klienta, który zna EngineFacade i chcę ustawić właściwość aktywny od Engine2 od klienta, ale ani klient, ani EngineFacade wie, które z trzy silniki to Engine2.
Istnieją dwa sposoby, ale nie lubię żadnego z nich:
- Sprawdź, czy jeden z silników jest typu Engine2 - jeśli istnieje inna klasa, która robi to samo zadanie, ale jest nazwany inny mam aby zmienić go w EngineBuilder AND w EngineFacade.
- Sprawdź za pomocą łańcucha identyfikacyjnego - naprawdę nie lubię magicznych ciągów.
Co wiem na stronie klienta jest to, że istnieje lub powinien być silnik, który obsługuje sieć. Ale nie wiem więcej.
Może muszę wybrać między dwoma diabłami, ale może jeden z was ma lepsze rozwiązanie.
Jeśli musisz zidentyfikować każdy silnik osobno, łatwą opcją jest nadanie mu unikalnego identyfikatora. Innym sposobem na to jest posiadanie właściwości name na silniku bazowym. Każdy silnik implementuje właściwość name, a następnie uruchamia zdarzenie, a następnie sprawdza parametr nadawcy. –
Być może powinieneś zbadać abstrakcję dostarczoną przez elewację. Wygląda na to, że masz jakiś wyciek. –
Możesz chcieć uwzględnić klienta, jego metody i zmienne w diagramie lub napisać kod ilustrujący użycie. –