adding abstract factory pattern demo