You want to manage complexity, but mention Design Patterns?
I'm not a fan of this book. I've been in too many shops where it's become gospel and the code becomes an unnavigable swamp of singletons and factory classes and who-knows-what.
A lot of people misunderstand that book. Design Patterns reduce complexity when used correctly. A good book to understand that is Refactoring to Patterns http://industriallogic.com/xp/refactoring/.
If you need your code to construct objects without knowing the type, then you need a factory (or other creation pattern). If you don't -- it's overkill. They are using a solution to a problem they don't have.
* Design Patterns: Elements of Reusable Object-Oriented Software
* Refactoring: Improving the Design of Existing Code
* Clean Code: A Handbook of Agile Software Craftsmanship
* Code Complete: A Practical Handbook of Software Construction
And some others:
* Working Effectively with Legacy Code
* Domain-Driven Design: Tackling Complexity in the Heart of Software