2010-05-03 15 views
8

Mam składnik, który musi wywoływać określoną usługę w zależności od wejścia, które otrzymuje. Tak więc mój komponent musi patrzeć na dane wejściowe i na podstawie konfiguracji, która mówi "dla tego połączenia wejściowego ta usługa z tymi danymi" musi wywołać odpowiednią usługę. Usługi mają wspólną metodę podpisu i konkretną (każdą).Czy istnieje wzór do tego?

Pomyślałem o klasie abstrakcyjnej, która zawiera podpisy dla wszystkich trzech metod. Implementacja dwóch usług zastąpi wszystkie trzy metody (rzucanie NotImplementedException dla metod, które nie są obsługiwane przez bieżącą usługę). Komponent, który można zainicjować za pomocą mapy (która dla każdego typu wejścia będzie miał typ usługi, która będzie wywoływana) zostanie również zdefiniowany.

Czy masz lepsze podejście do radzenia sobie z tym scenariuszem?

Odpowiedz

6

Factory pattern ma taką definicję:

zdefiniować interfejs do tworzenia obiektu , ale niech podklasy zdecydować której klasy instancji. Fabryka Metoda pozwala klasa odroczyć instancji do podklasy

Wygląda na to, co chcesz, prawda?

+1

Myślałem (oznaczono) o fabrycznym DP, ale w tym przypadku musi być ono połączone z innym wzorem, aby można było go "skonfigurować". Prosiłem o istniejące podejście w ten sposób. – ytrewq

+0

Może to również być związane z modelem Singleton lub puli obiektów – ytrewq

+0

Fasada lub wzorzec adaptera mogą być godne rozważenia, pozwalając na konfigurację, o której myślę. –

0

Firma Microsoft nazywa to Provider Model Design Pattern. Chociaż skoro twoje metody nie implementują wszystkich metod, być może nie jest to idealne dopasowanie.

At its most basic level the pattern is:

  • abstrakcyjna klasa bazowa definiowania umowę . Klasa abstrakcyjna bazowa ma wszystkie abstrakcyjne metody i właściwości, które są wymagane do implementacji publicznego interfejsu API, który obsługuje.

  • Informacje konfiguracyjne. Po utworzeniu klasy dostawcy dostawcy obiektów o nazwie należy go opisać w sekcji konfiguracji jako . Opis dostawcy w konfiguracji dostarcza wszystkich informacji, aby dostawca mógł zostać utworzony w uruchomionej aplikacji.

Abstrakcyjna klasa bazowa zwykle powinny wspierać metod fabryki do tworzenia nowych obiektów.

0

Wzór strategii jest dobrze dopasowany do Twojego problemu. Strategia zawiera algorytm, który należy wykonać w zależności od rodzaju danych, które wprowadziłeś.

Powiązane problemy