2012-01-25 6 views
6

Sembra che la necessità di un tipo come la seguente sarebbe stato così onnipresente che qualcosa di simile dovrebbe essere già integrato in Java:Esiste un tipo Java integrato che garantisce un metodo execute (T t)?

public interface Executer<T> { 
    void execute(T object); 
} 

Può quindi essere utilizzato in altre classi come questo esempio banale che chiama un mucchio di esecutori su un oggetto.

class Handler<T> implements Executer<T> { 
    List<Executer<T>> executerList; 

    Handler(List<Executer<T>> executer) { 
     this.executerList = executer; 
    } 

    void execute(T t) { 
     for (Executer<T> executer : this.executerList) { 
     executer.execute(t); 
     } 
    } 
} 

Esiste un equivalente di tipo integrato o un equivalente di libreria comune? C'è un nome per questo concetto?

+1

Quali dovrebbero essere le implementazioni dell'interfaccia di Executer, dato che devono essere richiamati su un tipo specifico T. – wmorrison365

+4

È 'Runnable' vicino a quello che stai cercando? – aardvarkk

+0

Concordo sul fatto che Runnable sarebbe sufficiente. Non sono davvero sicuro di cosa aggiunga il tuo costrutto. Esistono anche le classi di Executor concorrenti, ma queste funzionano come Runnable ed esistono per gestire le chiamate simultanee. – wmorrison365

risposta

4

Penso che il nome del concetto sia strategy pattern. In pratica stai incapsulando un algoritmo e questo rende più facile scambiare una strategia con un'altra o applicare una serie di strategie.

Questo modello di progettazione è molto semplice da implementare e il metodo execute non richiede solo un singolo argomento di un tipo specifico. Come tale, dubito che troverai un tipo di Java integrato, ma è un modello di progettazione ben noto.

+0

Sì, o forse lo schema di comando. Ciò fornirebbe una buona separazione delle preoccupazioni. – wmorrison365

+0

Oh, certo che è lo schema della strategia. Non so perché non l'ho riconosciuto.Sono un po 'sorpreso dal fatto che questa specifica interfaccia non sia abbastanza frequente da giustificare un tipo built-in. –

+0

@glenviewjeff Beh, penso che ne avresti bisogno per Executor , uno per Executor , uno per Executor , ecc. Ciò potrebbe risultare un po 'strano da includere come tipo built-in ... specialmente quando si definisce l'interfaccia è così facile da fare per il tuo caso d'uso specifico. –

2

Il più vicino che io conosca è Function<F,T> di Guava.

Non credo ci sia qualcosa nella libreria standard che fa esattamente quello che stai chiedendo. Runnable è piuttosto vicino, ma non accetta argomenti.

P.S. Penso che "function" o "functor" sia esattamente il nome giusto per questo concetto.

+0

Sono d'accordo sul fatto che il tipo 'Function' di Guava potrebbe essere effettivamente sostituito, il mio uso non si adatta all'intenzione di 'Function'. –

Problemi correlati