adding abstract factory example