basic software design patterns - Search