Imagine a store selling a variety of items. During a brief design session, we decide there are several classes of interest: Item (something for sale), Catalog (the set of all items), and Query (to find a specific set of items). Catalog and Query must collaborate to search, but how that collaboration will occur needs to be decided. Imagine a fourth class, Interrogator. It has a method evaluate(catalog, query) that returns a list of items. This method encapsulates the decision about how to handle things.
|