patterns of software design 2431150