applied design patterns