implementation decorator design pattern