add Visitor
add Observer