Files
abstract-factory
adapter
async-method-invocation
bridge
builder
business-delegate
callback
chain
command
composite
dao
decorator
dependency-injection
double-checked-locking
double-dispatch
event-aggregator
execute-around
facade
factory-method
flux
flyweight
front-controller
half-sync-half-async
intercepting-filter
interpreter
iterator
layers
lazy-loading
mediator
memento
message-channel
model-view-controller
model-view-presenter
multiton
naked-objects
null-object
object-pool
observer
poison-pill
private-class-data
property
prototype
proxy
repository
resource-acquisition-is-initialization
servant
service-layer
service-locator
singleton
specification
etc
src
index.md
pom.xml
state
step-builder
strategy
template-method
thread-pool
tolerant-reader
visitor
.gitignore
.travis.yml
LICENSE.md
README.md
checkstyle.xml
faq.md
pom.xml
java-design-patterns/specification/index.md

25 lines
780 B
Markdown
Raw Normal View History

---
layout: pattern
title: Specification
folder: specification
permalink: /patterns/specification/
categories: Behavioral
tags: Java
---
**Intent:** Specification pattern separates the statement of how to match a
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
![alt text](./etc/specification.png "Specification")
**Applicability:** Use the Specification pattern when
* you need to select a subset of objects based on some criteria, and to refresh the selection at various times
* you need to check that only suitable objects are used for a certain role (validation)
**Credits:**
* [Martin Fowler - Specifications](http://martinfowler.com/apsupp/spec.pdf)