add composite , decorate, singleton, observer pattern