added customer abstract factory