add facade, observer, iterator and visitor