use to learn design pattern