factory — design pattern in object-oriented programming