object oriented programming design patterns - Search