git add abstract interface and factory moderm