add bridge pattern
add observer pattern
add singleton pattern