add bridge patterns
add template method pattern