These two are terrific and should be spoon-fed to anyone who neglects the importance of OOAD:
http://web.abo.fi/~peholmst/DecouplingJavaClasses.pdf
http://www.mockobjects.com/book/
Plenty useful.
Also this is a goldie:
http://www.javaworld.com/javaworld/javaqa/2000-03/02-qa-innerclass.html?page=2
A favourite quote: "Whenever you see switches or large if/if else blocks, loud alarm bells should begin to ring in your mind. In general, such constructs are bad object-oriented design since a change in one section of the code may require a corresponding change in the switch statement."