changed factory method to abstract method
added abstract factory
Merge branch 'abstract_factory' into develop