edit decorator design pattern