2015-08-13 23:54:40 +02:00
|
|
|
---
|
|
|
|
layout: pattern
|
|
|
|
title: Specification
|
|
|
|
folder: specification
|
2015-08-15 18:03:05 +02:00
|
|
|
permalink: /patterns/specification/
|
2015-08-20 21:40:07 +02:00
|
|
|
categories: Behavioral
|
2015-12-28 15:52:44 +02:00
|
|
|
tags:
|
|
|
|
- Java
|
|
|
|
- Difficulty-Beginner
|
2015-08-13 23:54:40 +02:00
|
|
|
---
|
|
|
|
|
2016-01-03 21:14:30 +01:00
|
|
|
## Intent
|
|
|
|
Specification pattern separates the statement of how to match a
|
2015-08-13 23:54:40 +02:00
|
|
|
candidate, from the candidate object that it is matched against. As well as its
|
|
|
|
usefulness in selection, it is also valuable for validation and for building to
|
|
|
|
order
|
|
|
|
|
|
|
|

|
|
|
|
|
2016-01-03 21:14:30 +01:00
|
|
|
## Applicability
|
|
|
|
Use the Specification pattern when
|
2015-08-13 23:54:40 +02:00
|
|
|
|
|
|
|
* you need to select a subset of objects based on some criteria, and to refresh the selection at various times
|
2015-08-15 18:03:05 +02:00
|
|
|
* you need to check that only suitable objects are used for a certain role (validation)
|
2015-09-03 18:17:07 +05:30
|
|
|
|
2016-01-03 21:14:30 +01:00
|
|
|
## Credits
|
2015-09-03 18:17:07 +05:30
|
|
|
|
|
|
|
* [Martin Fowler - Specifications](http://martinfowler.com/apsupp/spec.pdf)
|