“Who's in charge here?”
This is a moderate-size example involving both refactoring and development. The goal is to demonstrate how we can use refactoring to explore design decisions and their consequences.
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.