Introduction
Welcome
What you should know before watching this course
Using the exercise files
Design Patterns
Understanding the need for design patterns
What are design patterns
Using design patterns
The Strategy Pattern
Understanding the pitfalls of inheritance and interfaces
Encapsulating code that varies
Programming to an interface
Setting behavior dynamically
Exploring the strategy pattern
Understanding why HAS-A is better than IS-A
The Observer Pattern
Using the observer pattern in the real world
Exploring the observer pattern
Understanding the observer pattern
Implementing the observer pattern
Using Java's Observer and Observable classes
Implementing the observer pattern with Java's Observer and Observable classes
The advantages of loose coupling
The Decorator Pattern
Creating chaos with inheritance
Understanding the open-closed principle
Extending behavior with composition
Understanding the decorator pattern
Implementing the decorator pattern
Understanding decorators in Java libraries
Using java.io decorators
The Singleton Pattern
What is the singleton pattern
Understanding the classic singleton pattern
Implementing the classic singleton pattern
Dealing with multithreading
Improving the singleton pattern implementation
The State Pattern
What is a state machine
Revisiting the design for a state machine
Understanding the state pattern
Implementing the state pattern
Comparing the state and strategy patterns
The Collection Pattern
Encapsulating iteration
Exploring the iterator pattern
Implementing the iterator pattern
Using Java's built-in iterators
Implementing with Java's built-in iterators
Making sure classes have only one responsibility
Factories
Encapsulating object creation
Understanding the Simple Factory idiom
Implementing the Simple Factory idiom
Exploring the factory method pattern
Implementing the factory method pattern
Conclusion
Looking at what we've done and where to go from here
Additional resources