Used extensively in App.Domain.Repositories.
It's separating the decision as to which object types should be selected in a query from the object that makes the selection.
Writing code like this allows reusing a Domain Layer Specification within a repository as a method for querying:
IEnumerable<Customer> customers = customerRepository.GetBySpec(IsPremiumCustomerSpecification);
That said, the original MF pattern was written prior to LINQ.
## Recipe ##
[TODO]