add chain of responsibility pattern
add decorator pattern