This article introduces the Design Techniques column and discusses the larger issues involved in designing Java programs. In addition, it examines the software development process in general, describes the role of design within that process, and looks at the various and competing goals of a "good" software design.
Read this Artima.com article:
http://www.artima.com/designtechniques/introdestech.html