alternatives to decorator pattern