Adding abstractFactory implementation