abstractFActory