LiveLessons: Design Patterns in Java

Douglas C. Schmidt (d.schmidt@vanderbilt.edu)
Cornelius Vanderbilt Professor
of Engineering (Computer Science),
Associate Provost of Research, and
Data Science Institute Co-Director
at Vanderbilt University

Table of Contents

oCourse Summary
oCourse Topics
oCourse Objectives
oRecommended Background
oJava Source Code
oFacebook Group
oAdditional Resources
oAbout the Instructor
o

Course Summary

Despite many improvements in hardware, developing quality software on-time and under budget remains hard. Moreover, developing high quality reusable software is even harder. In my experience, the principles, practices, and skills required to develop such software are best learned by gaining a firm understanding of patterns, pattern languages, and frameworks.

A pattern describes a reusable solution to a common problem that arises within a particular context of software design. When related patterns are woven together they form a pattern language that provides vocabulary and a process for the orderly resolution of software development problems. A framework is an integrated set of software components that collaborate to provide a reusable architecture for a family of related applications. Frameworks can also be viewed as concrete realizations of pattern languages that facilitate direct reuse of detailed designs and source code.

This LiveLessons course describes how to apply patterns and frameworks to alleviate the complexity of developing software via the use of object-oriented design techniques and Java programming language features. We'll use a case study based on many patterns in the book Design Patterns: Elements of Reusable Object-Oriented Software (the so-called ``Gang of Four'' or ``GoF'' book) to showcase pattern-oriented design and programming techniques in Java. This case study will help us evaluate the limitations with alternative design and programming methods (such as algorithm decomposition) and demonstrate by example how patterns and object-orientation help alleviate these limitations.

Course Topics

The Table of Contents for the course is available here. The following is a summary of the key topics covered in this course:

Course Objectives

Upon completing this course, students will be able to:

Recommended Background

This course is intended for software developers who are familiar with More coverage of these topics is available in my
Coursera MOOC on patterns and frameworks for concurrent and networked software.

Java Source Code

The Java source code for the expression tree processing app is available in a GitHub repository. This code has been written and tested using Eclipse on Android. It should be straightforward to port it to other Java environments, as well.

Suggestions for improvement are welcome (especially if they are accompanied with updates to the source code). Note that the GUI version of the Calculator "Verbose Mode" is still a work-in-progress. If you'd like to help improve it please let me know.

Facebook Group

There's a Facebook group on Design Patterns in Java. Feel free to post questions and comments on that group.

Additional Resources

The following are other online sources of material on GoF patterns:

About the Instructor


Back to Douglas C. Schmidt's LiveLessons page.