factory design pattern
first commit
first commit