Question 4 + 5, Use of Decorator Pattern and Factory Pattern