This document discusses refactoring and design patterns applied to improving a device manager scenario. It walks through steps of extracting an interface, applying the factory method pattern to decouple clients from products, using the singleton pattern to improve factory instantiation, applying the abstract factory pattern to handle multiple product families, and applying the prototype pattern to improve product instantiation. Rules of thumb are provided about when to use different creational patterns. References for further information are also included.