head first design pattern learning notes