All about design pattern