45 lines
2.1 KiB
Plaintext
45 lines
2.1 KiB
Plaintext
|
--- # this is so called 'Yaml Front Matter', read up on it here: http://jekyllrb.com/docs/frontmatter/
|
||
|
layout: pattern
|
||
|
title: Filterer Pattern
|
||
|
folder: filterer
|
||
|
permalink: /patterns/filterer/
|
||
|
description: Design pattern that helps container-like objects to return filtered version of themselves.# short meta description that shows in Google search results
|
||
|
categories:
|
||
|
- Functional
|
||
|
tags:
|
||
|
- Extensibility
|
||
|
---
|
||
|
|
||
|
## Name / classification
|
||
|
Filterer Pattern
|
||
|
|
||
|
## Intent
|
||
|
The intent of this design pattern is to to introduce a functional interface that will add a functionality for container-like objects to easily return filtered versions of themselves.
|
||
|
|
||
|
## Explanation
|
||
|
The container-like object needs to have a method that returns an instance of `Filterer`. This helper interface gives
|
||
|
ability to covariantly specify a lower bound of contravariant `Predicate` in the subinterfaces of interfaces representing the container-like objects.
|
||
|
|
||
|
## Class diagram
|
||
|

|
||
|
|
||
|
## Applicability
|
||
|
Pattern can be used when working with container-like objects that use subtyping, instead of parametrizing(generics) for extensible class structure.
|
||
|
It enables you to easily extend filtering ability of container-like objects as business requirements change.
|
||
|
|
||
|
## Tutorials
|
||
|
* [Article about Filterer pattern posted on it's author's blog](https://blog.tlinkowski.pl/2018/filterer-pattern/)
|
||
|
* [Application of Filterer pattern in domain of text analysis](https://www.javacodegeeks.com/2019/02/filterer-pattern-10-steps.html)
|
||
|
|
||
|
## Known uses
|
||
|
One of the uses is present on the blog presented in this link. It presents how to use `Filterer` pattern to create text issue anaylyzer with support for test cases used for unit testing.
|
||
|
|
||
|
## Consequences (the good and the bad, add criticism here)
|
||
|
Good :
|
||
|
* you can easily introduce new subtypes for container-like objects and subtypes for objects that are contained within them and still be able to filter easily be new properties of those new subtypes.
|
||
|
|
||
|
Bad :
|
||
|
* covariant return types mixed with generics can be sometimes tricky
|
||
|
|
||
|
## Credits
|
||
|
* Author of the pattern : [Tomasz Linkowski](https://tlinkowski.pl/)
|