add decorator design pattern