added Abstract Factory example