add abstract factory example