Applied Java Design Patterns
Spring 2010

knownspace logo
KnownSpace alumni

  • 5:45pm - 7:00pm, Room: SE240
  • 3 credit hours (grad and undergrad)
  • office hours: by appointment
  • AI: dnikolov - at - cs.indiana.edu
Project wiki

newbie mailing list

old hands mailing list


Design patterns are reusable solutions to common software problems. They are distilled design lessons, learned the hard way by vast numbers of developers over decades. They capture successful experiences and convey expert insight to beginners. A good alternate name might be "learn from my pain." This course is an in-depth introduction to design patterns, with a strong emphasis on project design and programming. It is intended primarily for grad students, but able Java-knowledgeable undergrads are encouraged to attend as well. It is design and programming intensive, and uses java for presentation and analysis of design patterns and for assignments and projects.


This course will help students:

  • develop advanced object-oriented programming insight,
  • apply modern software engineering---focussing on extreme programming, unit testing, and refactoring.

This course will help turn motivated students into superior contributors to any small to mid-sized commercial or open-source software project. Students putting in the effort will come out the other end with:

  • mastery of objected-oriented design,
  • familiarity with the situations and motivations that call for using a range of design patterns,
  • ability to use design patterns appropriately, and
  • ability to work with a teammate and with other teams within a large common project.


After a few weeks devoted to covering the basics of design patterns, extreme programming, unit testing, and refactoring, students will apply design patterns to a real software project (here's the latest design document) and be expected to deliver a working product. Students will work in teams all term long. Students must be committed to delivering an elegant design, robust code, well-written documentation, and be able to present their work to an audience concisely and intelligibly. For those with no prior real-world working experience it will be time-consuming and, sometimes, mentally challenging. Why take it?

NOTE: It is your responsibility to master Swing. Although early assignments will be dedicated partly to mastering advanced Swing use they are still mostly about mastering design patterns as without design patterns you can't fully understand a modern large library like Swing in the first place.


No auditors will be allowed. Everyone must get their hands dirty. Facile knowledge of java is mandatory. You MUST know Java to take this course. This is not a class on Java, it is a class with Java. Students must be VERY COMFORTABLE with the material in this elementary Java text and the following list of STYLE RULES. If Java is alien to you, or you think style is not important, or you think Java is just perverted C++, this course is not for you. If you are very comfortable with C# or C++ or (most especially) Smalltalk, you can still take the class, but you must still program in Java and thus must be able to master it quickly and on your own.

Further details on the course: Grading, Texts, Tools, and Links