add decorator & facade patterns