implementation of software design patterns