Chapter 17. Adopting Design Patterns in Swift