PATTERN ADDITION & UPDATE - decorator added, observer updated
PATTERN ADDITION - factory