running factory both abstract and factory method