abstract factory pattern classes added