Going further with factory methods

Now we've seen the basic implementation, let's have a look at how we could perform common tasks based on the pattern to extend it without breaking either the pattern or the paradigm.