- 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]]