decorator
done template/midterm
observer