Add template method pattern
Add factory method pattern