add Template Design Pattern
add Visitor Design Pattern