2019-10-08 14:19:28 +08:00
---
layout: pattern
title: Pipeline
folder: pipeline
permalink: /patterns/pipeline/
categories: Behavioral
tags:
2019-12-13 21:09:28 +02:00
- Decoupling
2019-10-08 14:19:28 +08:00
---
## Intent
Allows processing of data in a series of stages by giving in an initial input and passing the processed output to be used by the next stages.
2019-12-07 20:01:13 +02:00
## Class diagram

2019-10-08 14:19:28 +08:00
## Applicability
Use the Pipeline pattern when you want to
2019-12-13 21:09:28 +02:00
* Execute individual stages that yields a final value
* Add readability to complex sequence of operations by providing a fluent builder as an interface
* Improve testability of code since stages will most likely be doing a single thing, complying to the [Single Responsibility Principle (SRP) ](https://java-design-patterns.com/principles/#single-responsibility-principle )
2019-10-08 14:19:28 +08:00
## Typical Use Case
2019-12-13 21:09:28 +02:00
* Implement stages and execute them in an ordered manner
2019-10-08 14:19:28 +08:00
## Real world examples
* [java.util.Stream ](https://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html )
* [Maven Build Lifecycle ](http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html )
* [Functional Java ](https://github.com/functionaljava/functionaljava )
## Credits
* [The Pipeline Pattern — for fun and profit ](https://medium.com/@aaronweatherall/the-pipeline-pattern-for-fun-and-profit-9b5f43a98130 )
* [The Pipeline design pattern (in Java) ](https://medium.com/@deepakbapat/the-pipeline-design-pattern-in-java-831d9ce2fe21 )
2019-12-07 20:01:13 +02:00
* [Pipelines | Microsoft Docs ](https://docs.microsoft.com/en-us/previous-versions/msp-n-p/ff963548(v=pandp.10 ))