This is an improvement, but when more complex Hamburgers need to be created this factory will become confusing. The factory is also responsible for knowing how to create four different components. This is a lot for one function.
This is where a dependency injection framework can help. DI Frameworks have the concept of an Injector object. An Injector is a lot like the factory function above, but more general, and powerful. Instead of one giant factory function, an Injector has a factory, or recipe (pun intended) for a collection of objects. With an Injector, creating a Hamburger could be as easy as: