decorator and strategy patterns