add design pattern learning code!