adding Abstract Factory skeleton