Pipeline
Consiste en un procesamiento en cadena de un elemento, donde cada paso de la cadena genera una salida que será la entrada del paso consecutivo.
En el ejemplo se necesita ejecutar varios procesos sobre un objeto String, cada proceso tiene una única responsabilidad, como por ejemplo: remover caracteres especiales o colocar en mayúsculas las letras. Se crea una clase principal (handler) con la responsabilidad de ejecutar cada etapa en el orden asignado.
Ejemplo de uso:
StringProcessorHandler stringProcessorHandler = new StringProcessorHandler();
String processedString = stringProcessorHandler
.add(new RemoveSpecialCharProcessor())
.add(new ToUpperProcessor())
.execute("This$ is an uncl@ean+ed phr#aSe");
System.out.println(processedString); // Salida: THIS IS AN UNCLEANED PHRASE
Este patrón es muy útil cuando se tiene la necesidad de procesar un objeto (o dato) en un orden con una serie de etapas bien definidas. Además, se puede usar cuando la salida de una etapa es necesaria como entrada para otra. Un paso puede ser o no un requisito previo para otro paso.