The Specification pattern allows the decision of "how" to select an Entity from the Entity itself - it is a predicate that determines if an object does or does not satisfy some criteria.
This allows separation of complex or cross entity logic from the entites themselves.
Blogged The Specification Pattern
Double Dispatch
domaindrivendesign.org definitions: