implement decorator pattern.