Design patterns are the tools of a software, and you have to wield them skillfully to make it elegant. They are not instructions that you can obey blindly.