Consider, Design Patterns by Eric Gamma, Richard Helm, Ralph Johnson, John M. Vlissides