combination of several design patterns