Add decorator, observer and strategy pattern