Design Patterns — 1994 software engineering book