base abstract factory pattern realization added (20%)