decorator pattern 2
decorator pattern 1