This is an intermediate-level Java training course, geared for designers and architects that need to relate real world problems to Java-based solutions.
Becoming an effective, seasoned Java developer, requires a strong, shared vocabulary of design patterns and best practices. You need to be able to recognize and apply design patterns - to incorporate pattern awareness into your own analysis, design, and implementation practices.
The course begins with a focus on the Gang of Four (GoF) design patterns, including creational, behavioral, and structural patterns. This is not a patterns catalog: it is as much a study of how to "think in patterns" as it is an introduction to several of the most important patterns.
Students will be challenged to bring their own previous development experience to the discussion, to see the patterns in everyday design and coding solutions. The course puts more emphasis on some patterns than others. We believe that students will be better served by going into a few patterns in depth, with lively discussions of several others, than by following a regular routine of discussion and examples over every GoF pattern.
Upon successful completion of this course, the student will be able to:
- Start to think in terms of design patterns.
- Recognize and apply patterns to specific software development problems.
- Use known patterns as a shared vocabulary in designing and discussing solutions.
- Use Factories and Singletons to control object creation, for a variety of reasons.
- Use Observers, Observables, and Model/View/Controller systems to decouple application behavior and preserve code scalability.
- Understand the full motivation for the Command pattern and take advantage of Command frameworks in JFC.
- Implement Adapters, rather than building redundant classes or creating intermediate data structures for consumption by existing code.
- Understand and apply a range of other J2SE and J2EE patterns to improve code quality and scalability, and to produce high-quality solutions right off the bat.
Solid Java programming experience is essential - especially object-oriented use of the language. Language features and techniques that are integral to some lab exercises include interfaces and abstract classes, threading, generics and collections, and recursive methods.
Previous experience with UML (Unified Modeling Language) will be helpful, but is not critical. The course uses UML class diagrams extensively but keeps notation fairly simple, and also includes a quick-reference appendix.