Added design patterns implementation