2012-01-25 19 views
6

Parece que la necesidad de un tipo como el siguiente sería tan omnipresente que algo que debería estar ya incorporado en Java:¿Hay un tipo de Java incorporado que garantice un método de ejecución (T t)?

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

A continuación, se puede utilizar en otras clases como en este ejemplo trivial que llama a un montón de ejecuters en un objeto.

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); 
     } 
    } 
} 

¿Hay un equivalente de tipo incorporado o una biblioteca común equivalente? ¿Hay un nombre para este concepto?

+1

¿Qué deberían hacer las implementaciones de su interfaz Executer, dado que tienen que invocarse en un tipo específico T. – wmorrison365

+4

¿Está 'Runnable' cerca de lo que está buscando? – aardvarkk

+0

Estoy de acuerdo en que Runnable sería suficiente. No estoy seguro de qué agrega tu construcción. También están las clases de Ejecutor simultáneas, supongo, pero funcionan en Runnable y existen para gestionar invocaciones concurrentes. – wmorrison365

Respuesta

4

Creo que el nombre del concepto es strategy pattern. Efectivamente está encapsulando un algoritmo, y esto hace que sea más fácil cambiar una estrategia por otra o aplicar una serie de estrategias.

Este patrón de diseño es muy fácil de implementar, y el método execute no necesita tomar solo un único argumento de un tipo específico. Como tal, dudo que encuentres un tipo de Java incorporado, pero es un patrón de diseño bien conocido.

+0

Sí, o posiblemente el patrón de comando. Esto proporcionaría una buena separación de preocupaciones. – wmorrison365

+0

Oh, por supuesto, es el patrón de estrategia. No sé por qué no lo reconocí.Estoy un poco sorprendido de que esta interfaz específica no aparezca con la frecuencia suficiente para garantizar un tipo incorporado. –

+0

@glenviewjeff Bueno, entonces creo que necesitaría uno para el Ejecutor , uno para el Ejecutor , uno para el Ejecutor , etc. Podría apostar un poco raro incluirlo como un tipo incorporado ... especialmente al definir la interfaz es tan fácil de hacer para su caso de uso específico. –

2

Lo más cercano que sé es de Guava Function<F,T>.

No creo que haya nada en la biblioteca estándar que haga exactamente lo que estás preguntando. Runnable es algo cercano, pero no toma argumentos.

P.S. Creo que "función" o "functor" es exactamente el nombre correcto para este concepto.

+0

Acepto que si bien el tipo 'Function' de Guava podría ser sustituido, mi uso no se ajusta a la intención de 'Function'. –

Cuestiones relacionadas