add singleton
add iterator pattern.
add adapter pattern.