2010-05-03 6 views
8

Ho un componente che deve chiamare un servizio specifico a seconda dell'ingresso che riceve. Quindi il mio componente deve guardare l'input e basato su una configurazione che dice "per questo ingresso chiama questo servizio con questi dati" ha bisogno di chiamare il servizio appropriato. I servizi hanno un metodo di firma comune e uno specifico (ciascuno).Esiste uno schema di progettazione per questo?

Ho pensato a una classe astratta che include le firme per tutti e tre i metodi. L'implementazione per i due servizi annullerà tutti e tre i metodi (lancio di NotImplementedException per i metodi che non sono supportati dal servizio corrente). Verrà inoltre definito un componente che può essere inizializzato con una mappa (che per ciascun tipo di input avrà il tipo di servizio da chiamare).

Avete un approccio migliore per far fronte a questo scenario?

risposta

6

Factory pattern ha questa definizione:

Definire un'interfaccia per la creazione di un oggetto , ma cerchiamo sottoclassi decidere quale classe istanziare. Fabbrica metodo consente una classe di rinviare di un'istanza di sottoclassi

Suona come quello che si vuole, giusto?

+1

Ho pensato (taggato) al DP di fabbrica, ma in questo caso deve essere combinato con qualche altro modello, in modo da essere "configurabile". Stavo chiedendo un approccio esistente in questo modo. – ytrewq

+0

Inoltre, questo potrebbe essere associato al modello di pool Singleton o Object – ytrewq

+0

Il pattern di facciata o adattatore potrebbe essere degno di essere preso in considerazione per consentire alcune configurazioni che penserei. –

0

Microsoft chiama questo Provider Model Design Pattern. Anche se i tuoi metodi non implementano tutti i metodi, forse non è una buona idea.

At its most basic level the pattern is:

  • una classe base astratta che definisce un contratto . La classe base astratta ha tutti i metodi astratti e le proprietà necessarie per implementare l'API pubblica che supporta.

  • Informazioni di configurazione. Dopo aver creato un'implementazione della classe del provider di funzioni, è necessario descriverla nella sezione di configurazione. La descrizione del provider all'interno della configurazione fornisce tutte le informazioni in modo che il provider possa essere istanziato nell'applicazione in esecuzione.

La classe astratta di base di solito dovrebbe sostenere metodi factory per creare nuovi oggetti.

0

Il modello di progettazione della strategia è adatto al tuo problema. Una strategia incapsula un algoritmo e che deve essere eseguito a seconda del tipo di dati che hai come input.