There's no difference really. It's just an alternate approach. Personally, I use Factory-Classes whenever they are tied to creating a class that I own.

In the next chapter I think you'll see me using getServiceConfig() to create the TableGateway instance. This is due to me not owning TableGateway, so creating a 'Album\Db\TableGateway\TableGatewayFactory' would be kinda overkill :)

But that's how I justify the difference :P Ultimately, whenever you have FEW dependencies a closure is totally fine. Only if you have lots of stuff going on inside the factory then outsourcing it should be favored.