add simple factory
add factory method pattern
add abstract factory pattern