implemented abstract singelton
implemented create factory
removed abstract singleton since it is only used as create factory and create is already a singleton in native code